我广泛尝试寻找答案,但我的问题似乎太具体了。
我的查询包含拉丁字符:
$mydb->query("SELECT cotação FROM compras");
在 WordPress 短代码中调用时它工作正常,但在同一站点上的自定义 php 中它给了我这个:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '??o FROM compras' at line 1
现在,我不想只删除字符,因为我知道查询有效而且我更愿意理解问题所在。
那么这里发生了什么?谢谢。
最佳答案
为了让它在我的本地机器上工作,它不会工作,直到我将排序规则和 NAMES
设置为 UTF8。从我在搜索中发现的大量数据看来,这是人们在使用非 ASCII 字符时遇到的主要问题。
为了让它与我的本地 PDO 实例一起工作,我执行了以下操作:
$pdo->exec("SET collation_connection = utf8_bin");
$pdo->exec("SET NAMES utf8");
$all = $pdo->query("SELECT * FROM temp_cotação LIMIT 5")->fetchAll();
您可以在此处找到更多信息:
PDO cutting off strings at a UTF-8 character
在我看来,全局而不是每个连接都这样做会更好...我发现这是为每个连接全局执行 SET NAMES utf8
:
How to make PDO run SET NAMES utf8 each time I connect, In ZendFramework
要在 mysqli_ 中做同样的事情,看这里:
php mysql SET NAMES 'utf8' COLLATE 'utf8_unicode_ci' doesn't work with mysqli (solved)
关于php - MySQL 查询仅适用于 WordPress,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30177001/