PDO LIMIT和EMULATE_PREPARES(false)

时间:2018-09-24 05:39:25

标签: php pdo

我目前正在学习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

0 个答案:

没有答案