2011-04-01 137 views
7

可能重複:
PHP PDO bindValue in LIMITPDO LIMIT和OFFSET

使用極限時,我無法顯示的數據和/或在準備發言OFFSET,但我可以告訴「雷蕾「如果我不使用LIMIT和OFFSET,代碼看起來是否錯誤?

$statement = $conn->prepare("SELECT id,username FROM public2 WHERE username = :name LIMIT :sta OFFSET :ppage"); 
$name = "Lei Lei"; 
$statement->execute(array(':name' => $name,':sta' => $start,':ppage' => $per_page)); 

這已經從原來的代碼工作過變化:

$query_pag_data = "SELECT id,username from public2 LIMIT $start, $per_page"; 
$result_pag_data = mysql_query($query_pag_data) or die('MySql Error' . mysql_error()); 
+0

你運行'$陳述書>的execute()'兩次的原因嗎?你在執行後使用'$ statement-> fetch()'或'$ statement-> fetchAll()'來檢索結果嗎? – chriso 2011-04-01 04:05:12

+0

更新我的帖子,我正在使用$ statement-> fetch() – proyb2 2011-04-01 04:12:01

回答

0

編輯:固定

$statement = $conn->prepare("SELECT id,username FROM public2 WHERE username = :name LIMIT :limit OFFSET :offset"); 
$name = "Lei Lei"; 
$statement->bindValue(':name', $name); 
$statement->bindValue(':limit', (int) $start, PDO::PARAM_INT); 
$statement->bindValue(':offset', (int) $per_page, PDO::PARAM_INT); 
$statement->execute(); 
+0

它仍然不會顯示。 – proyb2 2011-04-01 05:00:37

+0

@ proyb2嘗試沒有OFFSET就像你原來的查詢:'SELECT id,username FROM public2 WHERE username =:name LIMIT $ start,$ per_page' – chriso 2011-04-01 05:06:36

+0

我明白了,那麼我該如何將LIMIT添加到prepare語句中呢? – proyb2 2011-04-01 05:25:16

16

我找到了答案!

$statement->bindValue(':sta1', (int) $start, PDO::PARAM_INT); 

做工作

+0

謝謝。我想知道爲什麼我的LIMIT:count不起作用。看起來它被當作一個字符串來投射。 – taco 2013-04-17 20:23:02

5
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 

會讓你綁定變量沒有被困擾他們的鍵入

+0

爲什麼在通話結束後添加PDO :: PARAM_INT時甚至會這樣做? – Stephen 2011-04-01 05:47:58

+1

@Stephen,因爲它使得添加PDO :: PARAM_INT不必要,愚蠢:) – 2011-04-01 06:50:17

+0

+1謝謝! :) – Gavin 2013-07-03 20:33:02

相關問題