2014-01-12 200 views
0

我试图用这个PHP PDO准备语句来运行SQL查询时在SQL查询中使用至少包括:使用PHP PDO预处理语句

$stmt = $pdo_conn->prepare("SELECT *, LEAST(:col_list) as num FROM callplandata WHERE number LIKE :number HAVING num != 0 "); 
      $stmt->execute(array(':col_list' => implode(',',$column_list), ':number' => '%'.$_POST["prefix"].'%')); 

但其显示此错误消息:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1582 Incorrect parameter count in the call to native function 'LEAST'' in /home/integra/public_html/included_pages/call_tarrif_search.php:62 Stack trace: #0 /home/integra/public_html/included_pages/call_tarrif_search.php(62): PDOStatement->execute(Array) #1 /home/integra/public_html/index.php(119): include('/home/integra/p...') #2 {main} thrown in /home/integra/public_html/included_pages/call_tarrif_search.php on line 62 

我做错了什么?

回答

1

LEAST接受2个或更多值并返回至少一个值。

您正在传递一个值,即错误的根源。 PS:只要你还没有解释原来的问题 - 这里没有什么补充。请不要问“如何解决它”,因为我们不知道你想达到什么目的。

+0

它使用正常的MySQL查询,我刚刚改变它是一个准备好的语句 – user2710234

+0

@ user2710234:似乎你不明白什么占位符是:'最少(:col_list)'意味着':col_list'会被替换为** SINGLE **字符串文字。你不能在那里传递'a,b,c',并期望它变成'最小(a,b,c)',它将是'最小('a,b,c')'。准备好的语句占位符要与**值**一起使用,而不能与对象一起使用。所以列名应该手动插入到查询中,只需要连接 – zerkms

+0

那么可以使用LEAST(''。implode(',',$ column_list)。“') - 我对PDO非常陌生,准备好的陈述,所以请耐心等待,如果我有点愚蠢:) – user2710234