2014-01-12 202 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