Em PHP faz a PDO :: PDOStatement-> bindParam () trabalho como ele é esperado?
Pergunta
Eu estou tentando sair DOP em PHP pela primeira vez. Pensei que PDOStatement-> bindParam () seria uma maneira legal para definir os tipos de dados dos valores que eu passar para a consulta SQL. Mas de alguma forma ele não funciona para mim. Por exemplo, eu definir o tipo de uma variável para INT na chamada bindParam. Mas ainda does not erro lance mesmo quando eu passar valores de cadeia puros a ele. Talvez eu estou fazendo algo errado. Aqui está o trecho do 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();
Estou fazendo tudo corretamente? Is not este deveria jogar de erro para a test2 parâmetro?
Solução
DOP não irá lançar uma exceção ou aumentar um erro, mas na melhor das hipóteses converter o parâmetro para um inteiro / longo. Por exemplo. em 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);
}
i. se você tiver registrado um parâmetro como PDO_INT mas a variável contém uma DOP boolean converte o bool para um int / long.