【问题标题】:PHP Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntaxPHP 致命错误:未捕获的 PDOException:SQLSTATE [42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误
【发布时间】: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

标签: php mysql sql pdo


【解决方案1】:

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

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

SQL Fiddle Demo

【讨论】:

  • 我该如何解决这个问题,我返回了 -20 值
  • @Policeboy109 也许,你可以将 $page 的值替换为 1,当它是 0 时。
  • 请看我的演示并尝试打印参数的返回值
  • 我不太明白
  • 啊,如果我将 $start_from 设置为 1 并将 $limit 设置为 2,它不会显示错误,但由于它不是动态的所以不能完全工作
猜你喜欢
  • 2022-01-06
  • 2021-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-02
  • 2019-08-08
  • 2020-02-09
相关资源
最近更新 更多