php - PDO 参数化查询的工作方式

标签 php pdo parameterized-query

请仔细阅读问题。这不是通常的愚蠢“我的代码不起作用!!!”问题。

当我运行此代码时出现预期错误

try {
  $sth = $dbh->prepare("SELECT id FROM users WHERE name INN(?,?) ");
  $sth->execute(array("I'm","d'Artagnan"));
} catch (PDOException $e) {
    echo $e->getMessage();
}

我收到此错误消息

You have an error in your SQL syntax ... near 'INN('I\'m','d\'Artagnan')' at line 1

但多年来我一直认为查询和数据分别发送到服务器并且永远不会干扰。因此我有一些问题(虽然我怀疑有人得到答案......)

  1. 它从哪里获得如此熟悉的字符串表示形式 - 引用和转义?它是专门用于报告错误还是实际查询的一部分?
  2. 实际效果如何?它是否用数据替换占位符?
  3. 有没有办法获取整个查询,而不仅仅是其中的一小部分,以用于调试目的?

更新

mysqli 按预期执行:它抛出一个错误说 near 'INN(?,?)'

最佳答案

尝试添加

$dbh->setAttribute( PDO::ATTR_EMULATE_PREPARES, false );

;)

关于php - PDO 参数化查询的工作方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3727186/

相关文章:

php - mysqli_fetch_assoc()需要参数/调用成员函数bind_param()错误。如何获取并修复实际的mysql错误?

php - 将数据从 Controller 发送到 View 还是在 View 中有逻辑?

php - 未捕获的异常 'PDOException',消息为“SQLSTATE[42S22] : Column not found”

c# - 来自 .NET 的参数化 DB2 查询

php - 如何在 magento 中将我的时间戳转换为 UTC 时间戳

php - 我怎样才能做相当于用 PHP 提交两次表单的操作?

Mysql使用PDO的错误信息

php - 多个插入不适用于SQLite 3

php - 参数化查询

sql - 参数化 SQL 的性能