Em PHP faz a PDO :: PDOStatement-> bindParam () trabalho como ele é esperado?

StackOverflow https://stackoverflow.com/questions/1445540

  •  22-07-2019
  •  | 
  •  

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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top