PHP 致命错误:未捕获的 PDOException:SQLSTATE [42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误

Posted

技术标签:

【中文标题】PHP 致命错误:未捕获的 PDOException:SQLSTATE [42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误【英文标题】:PHP Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax 【发布时间】:2018-06-30 16:14:04 【问题描述】:

我正在尝试创建分页脚本,但以下行似乎无法正常工作,导致页面无法加载。

 $limit = 20;

$start_from = ($page - 1) * $limit;

$stmt = $conn->prepare("SELECT * FROM logs ORDER BY id ASC LIMIT :startf, :limits");
$stmt->bindValue(":startf", $start_from, PDO::PARAM_INT);
$stmt->bindValue(":limits", $limit, PDO::PARAM_INT);
$stmt->execute();

我得到的错误是

php 致命错误:未捕获的 PDOException:SQLSTATE[42000]:语法错误 或访问冲突:1064 您的 SQL 语法有错误

我一直试图通过将 bindParam 更改为 bindValue 来修复它,添加 PDO::PARAM_INT 但它不会修复。

谢谢, 本杰

【问题讨论】:

也许你会得到一些 LIMIT 变量的负值。您是否尝试将它们(:startf,:limits)打印出来? 你需要检查你的变量值 我记得现在确实得到了一个负值。那是-20 【参考方案1】:

很可能你会得到一些变量 :startf:limits 的负值 LIMIT 子句。

一个 LIMIT 子句,用于指定要记录的记录数 返回,并且那些(在你的情况下都是两个)是非负整数值。

SQL Fiddle Demo

【讨论】:

我该如何解决这个问题,我返回了 -20 值 @Policeboy109 也许,你可以将 $page 的值替换为 1,当它是 0 时。 请看我的演示并尝试打印参数的返回值 我不太明白 啊,如果我将 $start_from 设置为 1 并将 $limit 设置为 2,它不会显示错误,但由于它不是动态的所以不能完全工作

以上是关于PHP 致命错误:未捕获的 PDOException:SQLSTATE [42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误的主要内容,如果未能解决你的问题,请参考以下文章

PHP 致命错误:未捕获的异常“Symfony\Component\Yaml\Exception\ParseException”

PHP“致命错误:未捕获错误:调用成员函数prepare()为null”

如何解决 PHP 致命错误:未捕获的错误:在 laravel 版本更新时调用未定义的方法 Illuminate\Container\Container::basePath() 错误?

如何修复 PHPUnit 中的“PHP 致命错误:未捕获的 TypeError:getTest() 参数”错误

parse-php-sdk 致命错误:未捕获的异常 'Parse\ParseException' 带有消息 'unauthorized'

致命错误:未捕获的异常“PDOException”,带有消息“SQLSTATE [42000]:语法错误或访问冲突 PHP 和 PDO