3 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個(gè)贊
因?yàn)樵诘谝粋€(gè)中,您忘記連接,從而導(dǎo)致錯(cuò)誤。但是等等...。
....您應(yīng)該始終使用準(zhǔn)備好的語句,這樣您就不必再擔(dān)心查詢中的引號了!
在第二個(gè)查詢中,PHP 將用單引號插入變量,因?yàn)檎麄€(gè)查詢被雙引號包圍。
小鮑比說你的腳本有SQL注入攻擊的風(fēng)險(xiǎn)。即使逃避繩子也是不安全的!

TA貢獻(xiàn)2011條經(jīng)驗(yàn) 獲得超2個(gè)贊
要回答您的問題,而不是繼續(xù)糾纏于查詢參數(shù)...
https://www.php.net/manual/en/language.types.string.php 解釋了在帶引號的字符串中使用引號字符的機(jī)制。
基本上,如果您的PHP字符串由分隔,那么下一個(gè)字符是字符串的末尾。"
"
但是,您可能希望在字符串中使用文字雙引號字符,但不要結(jié)束字符串。為此,您可以在它前面放置一個(gè)反斜杠,如下所示:
$sql = "INSERT INTO accountlist VALUES (\"\", \"$user\", \"$pwd\", \"$mail\", \"$date\")";
然后,反斜杠雙引號字符將成為字符串內(nèi)容的一部分,而不是字符串末尾的分隔符。
但是,雙引號字符串中的單引號字符不會(huì)導(dǎo)致相同的歧義,因此不需要反斜杠。因此,以下工作沒有錯(cuò)誤:
$sql = "INSERT INTO accountlist VALUES ('', '$user', '$pwd', '$mail', '$date')";
解析器可以分辨出單引號不是它要用來結(jié)束雙引號字符串的字符。因此,這些單引號被解析為文字字符。
這在許多其他編程語言中的工作方式相同,例如Java,C,C++,Ruby,Python,Perl,甚至在SQL本身中。
這就是為什么有些人可能聽起來不耐煩你問這個(gè)問題。這是一個(gè)非常初級的問題,表明你對編程語言的閱讀還不夠,你希望社區(qū)能為你提供個(gè)性化的輔導(dǎo),讓你了解你應(yīng)該自己掌握的概念。

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超3個(gè)贊
他們說的是死在錢上...而且也相當(dāng)容易!
您的查詢變?yōu)椋?/p>
INSERT INTO accountlist VALUES ("", ?, ?, ?, ?)
交易品種(請注意,它們沒有括在引號中)是參數(shù)。?
現(xiàn)在,每次執(zhí)行查詢時(shí),您都會(huì)提供一個(gè)數(shù)組,其中包含四個(gè)值,以便在語句中從左到右替換。這些值可以是任何東西,你不必關(guān)心引號等,因?yàn)樗鼈儾皇荢QL的一部分。相反,參數(shù)是輸入。
如果你必須做“很多這樣的”,比如幾千或幾百萬次,你只準(zhǔn)備一次語句,然后根據(jù)需要多次執(zhí)行準(zhǔn)備好的語句,每次提供不同的值數(shù)組作為輸入。
還有很多庫可以讓你按名稱指定參數(shù),給出命名值的哈希值,例如
INSERT INTO accountlist VALUES ("", :user:, :pwd:, :mail:, :date:) { 'user' => 'fred', 'pwd' => 'secret', 'mail' => 'foo@bar.com', 'date' => today() }
...并且該庫會(huì)將其轉(zhuǎn)換為有效的 SQL 語句,如上所示。
更安全,更少頭痛,并且明顯更有效率。
- 3 回答
- 0 關(guān)注
- 166 瀏覽
添加回答
舉報(bào)