2011-06-03 74 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