繁体   English   中英

SQL 查询有什么问题?

[英]What's wrong within SQL query?

我正在使用此查询来获取行范围,例如 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));
}

我收到以下错误:

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

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

传递的值必须是整数,但转换它们是不够的。

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

然后调用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

$per$from设置为数字字符串是完全可以的。 确保您没有将"'5'"作为值传递。 "'5'"int结果为0 尝试

// remove " and ' then cast to int
$yourNumber = (int) str_replace(['"', "'"], '', $yourInput);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM