2017-06-22 83 views
2

我想將GET var傳遞到查詢中以設置OFFSET。PDO參數讀取爲字符串而不是int

try { 

    $sql_offset = isset($_GET['offset']) ? $_GET['offset'] : 0; 

    $main_query = "SELECT * FROM Orders 
       LIMIT 150 OFFSET :offset"; 

    $result = $db->prepare($main_query); 
    $result->bindParam(':offset', $sql_offset, PDO::PARAM_INT); 
    $result->execute(); 

} catch (Exception $e) { 

    $error = $e->getMessage(); 
    echo "<h2>".$error."</h2>"; 
    die(); 

} 

查詢失敗,並收到錯誤消息是:

SQLSTATE [42000]:語法錯誤或訪問衝突:1064您的SQL語法錯誤;檢查對應於你的MySQL服務器版本正確的語法使用在附近的2號線「」 450「」

注意該手冊:如果我直接放在450到它工作正常查詢。

在我看來,問題在於它讀取的參數是字符串'450'而不是int 450.我試圖用PDO::PARAM_INT解決這個問題 - 沒有幫助。
我用(int)$sql_offsetint_val($sql_offset)解析了數值並沒有幫助。意思是,我仍然收到相同的錯誤信息。

問題:我說得對嗎?它看到的是一個字符串的問題嗎?如果是這樣,我該如何解決?
或者這裏有不同的問題嗎?

+0

嘗試此'$ main_query = 「SELECT * FROM訂單LIMIT:偏移,150」;' –

+2

嘗試'$ result-> bindValue(':偏移',(int)$ sql_offset,PDO :: PARAM_INT);' –

+0

您使用本地或模擬的預處理語句嗎? –

回答

0

嘗試解析值在int然後檢查:

$sql_offset = (int)(isset($_GET['offset']) ? $_GET['offset'] : 0); 
相關問題