2013-04-05 179 views
-4

使用一個變量,我想用戶PHP MySQL查詢的內部變量來表示WHERE子句,像這樣:在PHP MySQL查詢

$where= name=mark AND address=4; 

$query= "SELECT * FROM clients WHERE $where"; 

我這樣做正確嗎?如果不是,那麼正確的是什麼?

+1

考慮修改[基本變量](http://www.php.net/manual/en/language.variables.basics.php)。 – 2013-04-05 04:06:02

+0

[Duplicated](http://stackoverflow.com/questions/8157371/using-where-clause-as-a-variable-in-mysql-query-not-working), – gks 2013-04-05 04:06:18

回答

1

你的PHP方法是正確的,但是你需要在SQL字符串周圍單引號,你也需要包裝帶引號的字符串PHP變量,所以你的變量應該是這樣的:

$where = "name = 'mark' AND address = 4"; 
$query = "SELECT * FROM clients WHERE {$where}"; 
+0

您需要使用參數化查詢進行正確的轉義和安全!考慮PDO或mysqli而不是連接這樣的變量。 – user113215 2013-04-05 04:11:10

+0

謝謝,我自己使用PDO,只是回答OP的問題 – 2013-04-05 04:13:20

+1

@ user113215您還不知道變量來自哪裏。它也可以非常安全。 – itachi 2013-04-05 04:14:05

1

這是你想要什麼:

$where = "name= 'mark' AND address= '4'"; 

$query= "SELECT * FROM clients WHERE $where"; 

把雙引號放在$的值附近。 MySQL表字段的值應該用引號括起來

+0

您需要使用參數化查詢才能正確轉義和安全!考慮PDO或mysqli而不是連接這樣的變量。 – user113215 2013-04-05 04:11:58

+0

我發佈了OP的問題的答案。 – Sabari 2013-04-05 04:14:31

+1

@ user113215對於downvote觸發器非常快速。 +1來彌補它。 – 2013-04-05 04:16:05

0

您在引號內處理php變量的做法是錯誤的..並且您的語法也是錯誤的。 只要你想使用PHP雙引號變量..你應該把它包括在方括號{}。 而且,由於使用的是$where作爲字符串應該字符串中

$where= "name='mark' AND address=4"; 

$query= "SELECT * FROM clients WHERE {$where}"; 

雖然這可能不是與此有關,但另一個好的做法是在使用PHP變量與字符串使用sprintf()正確封閉

$query = sprintf("SELECT * FROM clients WHERE %s", $where);