PDO参数化查询的工作方式 [英] The way PDO parametrized query works
本文介绍了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...)
- 它在哪里得到如此熟悉的字符串表示形式-用引号引起来并转义?是专门用来报告错误还是它是实际查询的一部分?
- 它如何真正发挥作用?是否用数据代替占位符?
- 是否有一种方法可以获取整个查询,而不只是其中的一部分,以进行调试?
更新
mysqli
按预期方式执行:抛出错误,提示near 'INN(?,?)'
mysqli
does it as expected: it throws an error says near 'INN(?,?)'
推荐答案
尝试添加
$dbh->setAttribute( PDO::ATTR_EMULATE_PREPARES, false );
;)
这篇关于PDO参数化查询的工作方式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文