2012-05-21 181 views
2

我檢查了這個: How do I use pdo's prepared statement for order by and limit clauses?如何使用?帶有「LIMIT?」的SQL語句的佔位符?

但它不談論「?」佔位符。

我有這樣的語句:

$stmt=$connect->prepare("SELECT * FROM users LIMIT ?"); 
$stmt->execute(array($max_num)); 

但它不工作,因爲不應該限制次數的是與擺在首位括號括起來。

我該如何解決這個問題?提前致謝。

+0

是什麼在'$ max_num'? – Jivings

+0

它是最大行數,'$ max_num = $ _ GET ['max_num']'。它由用戶定義。謝謝 – alexx0186

+0

你得到的錯誤信息是什麼? – Jivings

回答

1
$connect->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
$stmt=$connect->prepare("SELECT * FROM users LIMIT ?"); 
$stmt->execute(array((int)$max_num)); 
+0

嗨克里斯,謝謝你的迴應。它爲我工作。我甚至不需要使用'(int)'。在這種情況下,setAttribute語句的目的是什麼?非常感謝。 Regards – alexx0186

+0

哎呀,我認爲你退出了。無論如何,請讓我知道這一點,因爲我非常想知道錯誤處理屬性爲何解決了這個問題。謝謝 – alexx0186

+0

@ alexx0186我認爲這個鏈接可能是相關的。 https://開頭michaelseiler。net/2016/07/04/dont-emulate-prepared-statements-pdo-mysql/ – Julian

0

嘗試

$stmt->execute(array((int)$max_num)); 

或者,如果還是不行,請嘗試

$stmt->bindParam(1, (int)$max, PDO::PARAM_INT); 
$stmt->execute(); 
+0

嗨,感謝您的回覆,但我無法使其工作。它給了我'PHP致命錯誤:不能通過' – alexx0186

+0

中的引用傳遞參數2在哪個示例中? (順便說一句,我剛剛注意到#1的括號不匹配,所以我會解決這個問題) – aynber

-2

它看起來像PDO不明白LIMIT知道它的數值。你可能不得不忍受

$connect->query("SELECT * FROM users LIMIT $max_num"); 
2
$stmt=$connect->prepare("SELECT * FROM users LIMIT ?"); 
    $stmt->execute(array($max_num)); 

上面的查詢不工作,因爲該參數需要一個整數,當你將它綁定在上面的方式,該值被綁定到一個字符串。

因此,解釋查詢的形式如下:

select * from users limit '1' 

你應該修改通過以下方式查詢:

 $stmt->bindValue(1,1,PDO::PARAM_INT); 
    $stmt->execute(); 
+0

嗨,謝謝你的迴應。第一個'1'是參數的索引位置?如果我有'SELECT * FROM users WHERE user =? LIMIT?',我有'$ stmt-> execute(array($ user))'。它應該是'$ stmt-> bindValue(2,$ max_num,PDO :: PARAM_INT);'?非常感謝 – alexx0186

+1

是的,你是對的。 1是指數位置。 $ stmt-> bindValue(2,1,PDO :: PARAM_INT); $ stmt-> bindValue(1, '用戶名');然後$ stmt-> execute(); – sudip

+0

噢,謝謝你的提示。問候 – alexx0186