Domanda

Sto provando DOP in PHP per la prima volta. Ho pensato che PDOStatement- > bindParam () sarebbe stato un ottimo modo per impostare i tipi di dati dei valori che passo alla query sql. Ma in qualche modo non funziona per me. Ad esempio, ho impostato il tipo di una variabile su INT nella chiamata bindParam. Ma non genera ancora errori anche quando gli passo valori di stringa puri. Forse sto facendo qualcosa di sbagliato. Ecco lo snippet del codice ..

$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();

Sto facendo tutto correttamente? Questo non dovrebbe generare un errore per il parametro test2?

È stato utile?

Soluzione

PDO non genererà un'eccezione o genererà un errore, ma nella migliore delle ipotesi converte il parametro in un numero intero / lungo. Per esempio. in 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);
}

vale a dire. se hai registrato un parametro come PDO_INT ma la variabile contiene un PDO booleano converte il bool in un int / long.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top