这个问题已经在这里有一个答案:
我正在写一个分页脚本,而留下不相关的细节,现在是这样的:
$starting_limit = ($page-1)*$limit;
$show = "SELECT * FROM company ORDER BY id ASC LIMIT :starting_limit, :limit";
$r = $pdo->prepare($show);
$r->execute(array(':starting_limit' => $starting_limit, ':limit' => $limit));
当我运行它,我得到一个错误:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]:
Syntax error or access violation: 1064 You have an error in your SQL syntax;
check the manual that corresponds to your MariaDB server version for the right
syntax to use near ''0', '10'' at line 1' in C:\xampp\htdocs\plain-
pkr\tutorial_pagination.php:34 Stack trace: #0 C:\xampp\htdocs\plain-
pkr\tutorial_pagination.php(34): PDOStatement->execute(Array) #1 {main} thrown
in C:\xampp\htdocs\plain-pkr\tutorial_pagination.php on line 34
但是,当我改变:参数设置为$参数,它的工作原理:
$starting_limit = ($page-1)*$limit;
$show = "SELECT * FROM company ORDER BY id ASC LIMIT $starting_limit, $limit";
$r = $pdo->prepare($show);
$r->execute();
为什么?
尽量做到INT,因为你的错误味精显示你正在处理limit
和offset
为字符串即'0', '10'
不是整数,因为与PDOStatement::execute,所有值都被视为PDO :: PARAM_STR。
$r->bindValue(':starting_limit', $starting_limit, PDO::PARAM_INT);
$r->bindValue(':limit', $limit, PDO::PARAM_INT);
$r->execute();
或者您可以使用此停止生产的数字参数报价
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);