php - SQL 查询出了什么问题?

标签 php mysql sql pdo mariadb

我使用此查询来获取行范围,例如 0-5 ,但我收到一条错误消息。

这是代码:

if(isset($_GET['page']) && isset($_GET['per'])){        
    $per = $_GET['per'];
    $pageNumber = $_GET['page'];
    $from = ($pageNumber * $per) - $per;
    $results = $pdo->prepare('SELECT * FROM users LIMIT :sfrom , :sto');
    $results->execute(array('sfrom' => $from , 'sto' => $per));
}

我收到以下错误:

fatal error :未捕获异常“PDOException”,消息为“SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,了解在 ''5' 、 '5'' 附近使用的正确语法

我认为这是因为$from$per作为字符串插入或我尝试使用 (int)$from 将它们转换为 int , (int)$per 但仍然有同样的错误

最佳答案

传递的值必须是整数,但对它们进行强制转换还不够。

使用PDOStatement::指示PDO绑定(bind)参数的类型为整数bindParam

然后调用 PDOStatement::execute 作为最后一步(不带参数)。

$results = $pdo->prepare('SELECT * FROM users LIMIT :sfrom , :sto');
$results->bindParam(':sfrom', (int)$from, PDO::PARAM_INT );
$results->bindParam(':sto',   (int)$to,   PDO::PARAM_INT );
$results->execute();

参见http://php.net/manual/en/pdostatement.bindparam.php

关于php - SQL 查询出了什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49089492/

相关文章:

mysql - 如何从 MySQL 表中删除重复的记录?

c# - Gridview 显示控件(标签、按钮、文本字段),即使数据源为空

php - XmlReader::next 在返回 false 时如何定位光标

php - Wordpress ACF 字段到样式表

mysql存储过程不工作

mysql - 如果到达最后一行,则从第一行返回

MySQL 在一个查询中将 SUM() 函数乘以字段

php - 即使表二为空或找到部分结果,也返回表一中的所有行

php - 在mysql中将camelcase表和列名转换为snake case

mysql - 将日期从 MM/DD/YYYY 解析为 MYSQL 可以使用的格式