2014-10-04 37 views
0

我以爲我會添加類似於以下到PHP一份聲明在MySQL中運行的第一行的條款:爲什麼在準備好的陳述中計算的「like」子句需要括號?

$sql .= " where ? like '%'+name+'%' "; 

if ($stmt = mysqli_prepare($con, $sql)) {  
//irrelevant code omitted here. 
} else { 
    echo("Error description: " . mysqli_error($con)); 
} 

其中名稱是在表中的列?是要綁定的參數。如果我用「弗雷德」取代?和MySQL的工作臺它將運行運行

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 '+name+'%' at line 1

我得到這個錯誤。同樣它的工作原理,如果我只是刪除級聯,以便它開始$sql .= " where ? like name ";

但是,如果我只是改變它像這樣:

? like ('%'+name+'%') 

然後它運行。有人知道爲什麼請嗎?我問,因爲我覺得這裏有些東西需要理解,我沒有明白。特別是我想知道在使用預準備語句時是否還有其他場景需要添加任意圓括號?

+0

而且,閱讀'LIKE' http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html#operator_like - 你不應該有'+'標誌。 – 2014-10-04 20:40:04

回答

3

使用CONCAT(str1,str2,...)來連接:

$sql .= " where ? like CONCAT('%', name, '%')"; 

+ - 是除了運營商在MySQL號碼,請訪問:http://dev.mysql.com/doc/refman/5.7/en/arithmetic-functions.html#operator_plus

+1

我看不出爲什麼這是upvoted。你不能綁定列。 '哪裏?'是無效的。 OP:*「如果我用'fred'替換'''並在MySQL工作臺上運行它,它將運行。」* – 2014-10-04 20:33:28

+0

@ Fred-ii-你是不對的。 「哪裏? LIKE samething'是有效的。到'?'OP是綁定字符串值,而不是列名。請參閱LIKE文檔:http://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html#operator_like – Rimas 2014-10-04 21:01:13

+0

閱讀此文=> http://stackoverflow.com/q/11312737/和給出答案。 – 2014-10-04 21:04:05

-1

其實我的事情就應該是這樣的:

$sql .= " where ? like '%name%'"; 
+0

這將與文字值'name'進行比較,而不是名稱列中的值。 – miken32 2014-10-04 20:26:36

+0

供參考:做'哪裏?'無效。您不能綁定表格和/或列。儘管你可以做'where $ variable'。 – 2014-10-04 20:31:18

相關問題