[英]Single quote, Double quote and Mysql Query with PHP
我正在使用語法
$query = "SELECT * FROM contacts WHERE contact_id = $id";
它經常工作,但往往不起作用。 然后,如果我使用
$query = 'SELECT * FROM contacts WHERE contact_id = "'.$id.'";
然后它工作。 哪一個是正確的方法?
事實上,在編寫SQL查詢時,這些語法都不是最好的。
如果你正在編寫一個SQL查詢,你是好得多使用參數化查詢,像這樣寫的:
$query = 'SELECT * FROM contacts WHERE contact_id = ?';
$prep = $mysqli->prepare($query); //prepares the query for action
$prep->bind_param("i", $id); //inserts the $id variable into the '?' as an integer value.
...或使用PDO庫的類似方法。
以這種方式進行查詢將使您的查詢更安全。
請注意,如果您使用的是舊式mysql_xx()
函數(不支持此類代碼),則這些函數將被視為過時且不安全,並將從未來的PHP版本中刪除。 你應該盡快停止使用它們。 (有關詳細信息,請參閱PHP手冊)
從問題中不清楚您是在詢問字符串語法還是查詢寫作風格。 以上內容有助於查詢編寫,也避免了字符串語法的問題,但是如果您仍然想知道字符串語法問題,我將繼續對該主題進行一些思考....
兩種語法都完全有效。 簡短的回答是,無論哪種方式都很好,所以在任何給定的代碼中,無論哪種方式最適合您。
您提到您的第一個語法“通常不起作用”。 如果您可以詳細說明這一點會很有幫助,因為它是完全有效的PHP語法。
它可能失敗的原因是,如果您有其他單詞加入變量名稱,那么PHP,或者如果您嘗試使用數組元素作為變量。 在這種情況下,您應該將變量名稱包裝在大括號中,如下所示:
$string = "this is a string with a {$variable} in it";
實際上,這適用於所有情況(並且當您在字符串中使用變量時也有助於使其更清晰),因此最好始終這樣做。
有些人會說使用單引號更有利於提高性能。 它是....但差異很小,事實上,當你連接很多變量時,它變得更少。 說實話,如果他們擔心性能,這種事情對他們來說是一個問題,那么他們不應該使用像PHP這樣的解釋性語言。
$query = "SELECT * FROM contacts WHERE contact_id = '". $id . "'";
但是使用SQL Injection
查詢。 這是一篇如何從SQL Injection
保護代碼的文章
如果要篩選的列不是數字,則下面的查詢將不起作用。
$query = "SELECT * FROM tableName WHERE username = $name";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.