[英]PHP PDO Prepared Statement parameter causing error
我在准備帶有參數的語句時遇到問題,請參見下文。
如果這是一個愚蠢的錯誤,我事先表示歉意。
錯誤:
Failed to run query (Project List) - SQLSTATE[42000]: Syntax error or access violation: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''0,8'' at line 1
編碼:
$limit = ($pagenum - 1) * $page_rows . "," . $page_rows;
print_r($limit); // Prints 0,8 as expected
$query = "SELECT * FROM projects INNER JOIN users ON projects.companyid = users.companyid ORDER BY projects.projectid DESC LIMIT :limit";
$query_params = array (
':limit' => $limit
);
try {
$stmt = $db->prepare($query);
$stmt->execute($query_params);
}
catch (PDOException $ex) {
die("Failed to run query (Project List)" . " - " . $ex->getMessage());
}
到目前為止,我已經嘗試過:
$limit
字符串的一部分添加 LIMIT 0,8
手動測試了SQLyog中的SQL查詢-正常工作 您的$ limit參數將作為一個參數進行轉義,而應將其作為兩個參數進行轉義。 您的sql當前看起來類似於“ limit'0,8';”。 應該看起來像“極限0、8”;
為了解決這個問題,您應該將limit參數一分為二。 編輯SQL的末尾,如下所示:
LIMIT :offset, :limit
您的參數列表如下所示:
$query_params = array (
':offset' => ($pagenum - 1) * $page_rows,
':limit' => $page_rows
);
正如史密斯先生所說,您還必須添加以下行:
$db->setAttribute( PDO::ATTR_EMULATE_PREPARES, false );
為確保將限制參數正確地處理為整數而不是字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.