Pregunta

Estoy probando PDO en PHP por primera vez. Pensé que PDOStatement- > bindParam () sería una forma genial de establecer los tipos de datos de los valores que paso a la consulta SQL. Pero de alguna manera no funciona para mí. Por ejemplo, configuré el tipo de una variable en INT en la llamada de bindParam. Pero todavía no arroja un error incluso cuando le paso valores de cadena puros. Tal vez estoy haciendo algo mal. Aquí está el fragmento del código ...

$query = "select * from PDO_TABLE where A_COLUMN = :test1 or B_COLUMN = :test2";

$test1 = '0';
$test2 = 'a';
$preparedStatement = $conn->prepare($query);

echo $preparedStatement->bindParam(':test1', $test1, PDO::PARAM_INT);
echo $preparedStatement->bindParam(':test2', $test2, PDO::PARAM_INT);

$preparedStatement->execute();

¿Estoy haciendo todo correctamente? ¿No se supone que esto arroja un error para el parámetro test2?

¿Fue útil?

Solución

PDO no arrojará una excepción o generará un error, pero en el mejor de los casos convertirá el parámetro a un entero / largo. P.ej. en pdo_stmt.c:

if (PDO_PARAM_TYPE(param->param_type) == PDO_PARAM_INT && Z_TYPE_P(param->parameter) == IS_BOOL) {
  convert_to_long(param->parameter);
}

es decir si ha registrado un parámetro como PDO_INT pero la variable contiene un PDO booleano convierte el bool en int / long.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top