[英]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();
將$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.