2011-06-03 113 views
0

在我的PDO實現,我試圖SQL語句的限制子句中使用插入值:正確返回在SQL語句的limit子句中使用PDO插入值?

$sql = "SELECT * FROM table ORDER BY datetime DESC LIMIT :limit"; 
$params = array(":limit" => 5); 
$query = $dbh->prepare($sql); 
$query->execute($params); 
$result = $query->fetchall(PDO::FETCH_ASSOC); 

$params$query,但$result是空的。

在運行print_r($query->errorInfo);,我得到如下:

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 ''5'' at line 1 

如何使用PDO的插入值在此查詢?我做對了嗎?

+0

你登錄查詢?什麼是實際的SQL是生成? – Wes 2011-06-03 01:57:58

回答

2

PHP PDO bindValue in LIMIT

基本上,你需要投極限值結合使用時,INTVAL()爲int。

+0

我必須使用bindValue,或傳遞一個插入值的猜測也是可能的? – 2011-06-03 02:32:21

+0

太好了!這很好。它現在在我的幫助函數中,所以我不必一直這樣做。 Byebye mysql_real_escape_string()! – 2011-06-03 02:45:21

-1

您不能將變量綁定到LIMIT子句的操作數(確切地說,它可能取決於您的數據庫系統供應商)。相反,只使用字符串插值。 :-(

$limit = 5; 
$sql = "SELECT * FROM table ORDER BY datetime DESC LIMIT $limit"; 
$stmt = $dbh->query($sql); 
$result = $stmt->fetchall(PDO::FETCH_ASSOC); 
+0

而不是用戶字符串插值,仔細清理$ limit值後,如果你從系統外部獲取它,例如'$ _GET ['limit']'或其他東西。 – 2011-06-03 02:03:03

+0

不幸的是......字符串插值是我試圖避免在第一個地方! – 2011-06-03 02:05:44