簡體   English   中英

單引號,雙引號和PHP的Mysql查詢

[英]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保護代碼的文章

在PHP中防止SQL注入的最佳方法?

如果要篩選的列不是數字,則下面的查詢將不起作用。

$query  = "SELECT * FROM tableName WHERE username = $name";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM