我目前正在学习php
,并且正在使用PDO
处理数据库。尝试在查询中使用LIMIT
时遇到问题:
致命错误:未捕获的PDOException:SQLSTATE [42000]:语法错误或 访问冲突:1064您的SQL语法错误;检查 对应于您的MariaDB服务器版本的手册 在第1行的“ 0”,“ 25”附近使用的语法
经过“研究”后,解决方案是将此属性添加到我的PDO
:
PDO::ATTR_EMULATE_PREPARES => false
现在我的脚本看起来像这样(LIMIT
起作用了):
try {
$attr = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_EMULATE_PREPARES => false
];
$pdo = new PDO('mysql:host=127.0.0.1;dbname=db_name', 'root', '', $attr);
} catch (PDOException $e) {
exit($e->getMessage());
}
$rows = $pdo->prepare("SELECT * FROM table_name LIMIT ?, ?");
$rows->execute([0, 25]);
但是我的问题是PDO::ATTR_EMULATE_PREPARES => false
的实际作用是什么?这是一个好的解决方案吗?它是否以任何方式影响该准备好的陈述的安全性水平?在准备好的语句中使用LIMIT
时,还有其他解决方案可能会做得更好吗?
谢谢! :D