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