PDO MySQL如何处理预准备语句中的参数?

时间:2012-10-14 00:11:21

标签: php mysql pdo mysqli prepared-statement

例如在我准备好的statemens中的Named Placeholder中,我可以:

<?php
$stmt = $db->prepare("SELECT * FROM table WHERE id=:id AND name=:name");
$stmt->bindValue(':id', $id, PDO::PARAM_INT);
$stmt->bindValue(':name', $name, PDO::PARAM_STR);
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

带有->bindValue的{​​{1}}是否使用“PDO::PARAM_INT”或“$id”PHP函数检查is_int是否真的是一个整数,或者以其他方式检查如果is_numeric不是设置$id设置的->bindValue预期的那样,它会失败并崩溃吗?

我是PDO MySQL的新手,我也想知道:

PDO::PARAM_INT

修复$stmt->bindValue(':name', $name, PDO::PARAM_STR); 中遇到的任何编码问题,是否可以自动处理修剪和条带标记?

1 个答案:

答案 0 :(得分:2)

  

将&gt; bindValue与PDO :: PARAM_INT一起使用

检查$ id是否真的是一个整数

不会被检查。将变量绑定为PARAM_INT将使PHP简单地将其转换为整数(int)"123"。不会发生错误,非数字字符串将简单地转换为零。另请参阅String conversion to numbers上的PHP手册。

  

...... PDO :: PARAM_STR);
  修复任何编码问题,如果在$ name中记录,它是否可以自动处理修剪和条带标记?

对于字符串类型参数,不会自动修剪或转换传递的值。

如果输入字符集与数据库字符集不同,则编码将由PDO驱动程序或接收数据库服务器进行调整。但就是这样。