PDO参数化查询的工作方式 [英] The way PDO parametrized query works

查看:92
本文介绍了PDO参数化查询的工作方式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请仔细阅读问题. 我的代码无法正常工作!"这不是通常的愚蠢行为.问题.

PLEASE READ THE QUESTION CAREFULLY. It is not usual silly "my code doesn't work!!!" question.

当我运行此代码时遇到预期错误

When I run this code with intended error

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

我收到此错误消息

您的SQL语法有错误...在第1行的'INN('I \'m','d \'Artagnan')'附近

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

但是我多年来一直认为,查询和数据是分别发送到服务器的,并且永远不会干扰.因此,我有一些问题(尽管我怀疑有人能回答...)

But I thought for years that query and data being sent to the server separately and never interfere. Thus I have some questions (though I doubt anyone got an answer...)

  1. 它在哪里得到如此熟悉的字符串表示形式-用引号引起来并转义?是专门用来报告错误还是它是实际查询的一部分?
  2. 它如何真正发挥作用?是否用数据代替占位符?
  3. 是否有一种方法可以获取整个查询,而不只是其中的一部分,以进行调试?

更新

mysqli按预期方式执行:抛出错误,提示near 'INN(?,?)'

mysqli does it as expected: it throws an error says near 'INN(?,?)'

推荐答案

尝试添加

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

;)

这篇关于PDO参数化查询的工作方式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆