亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

SQL 中的 PHP 報價

SQL 中的 PHP 報價

PHP
Qyouu 2022-09-17 22:38:07
為什么此代碼會產生錯誤  $sql = "INSERT INTO accountlist VALUES (\"\", \"$user\", \"$pwd\", \"$mail\", \"$date\")";而這個沒有?  $sql = "INSERT INTO accountlist VALUES ('', '$user', '$pwd', '$mail', '$date')";我知道雙引號處理變量,而單引號則不然,所以第一個選項應該是正確的,但它恰恰相反!
查看完整描述

3 回答

?
烙印99

TA貢獻1829條經驗 獲得超13個贊

因為在第一個中,您忘記連接,從而導致錯誤。但是等等...。

....您應該始終使用準備好的語句,這樣您就不必再擔心查詢中的引號了!

在第二個查詢中,PHP 將用單引號插入變量,因為整個查詢被雙引號包圍。

小鮑比你的腳本有SQL注入攻擊的風險。即使逃避繩子也是不安全的!


查看完整回答
反對 回復 2022-09-17
?
森林海

TA貢獻2011條經驗 獲得超2個贊

要回答您的問題,而不是繼續糾纏于查詢參數...

https://www.php.net/manual/en/language.types.string.php 解釋了在帶引號的字符串中使用引號字符的機制。

基本上,如果您的PHP字符串由分隔,那么下一個字符是字符串的末尾。""

但是,您可能希望在字符串中使用文字雙引號字符,但不要結束字符串。為此,您可以在它前面放置一個反斜杠,如下所示:

$sql = "INSERT INTO accountlist VALUES (\"\", \"$user\", \"$pwd\", \"$mail\", \"$date\")";

然后,反斜杠雙引號字符將成為字符串內容的一部分,而不是字符串末尾的分隔符。

但是,雙引號字符串中的單引號字符不會導致相同的歧義,因此不需要反斜杠。因此,以下工作沒有錯誤:

$sql = "INSERT INTO accountlist VALUES ('', '$user', '$pwd', '$mail', '$date')";

解析器可以分辨出單引號不是它要用來結束雙引號字符串的字符。因此,這些單引號被解析為文字字符。

這在許多其他編程語言中的工作方式相同,例如Java,C,C++,Ruby,Python,Perl,甚至在SQL本身中。

這就是為什么有些人可能聽起來不耐煩你問這個問題。這是一個非常初級的問題,表明你對編程語言的閱讀還不夠,你希望社區能為你提供個性化的輔導,讓你了解你應該自己掌握的概念。


查看完整回答
反對 回復 2022-09-17
?
一只名叫tom的貓

TA貢獻1906條經驗 獲得超3個贊

他們說的是死在錢上...而且也相當容易!

您的查詢變為:

INSERT INTO accountlist VALUES ("", ?, ?, ?, ?)

交易品種(請注意,它們沒有括在引號中)是參數。?

現在,每次執行查詢時,您都會提供一個數組,其中包含四個值,以便在語句中從左到右替換。這些值可以是任何東西,你不必關心引號等,因為它們不是SQL的一部分。相反,參數是輸入。

如果你必須做“很多這樣的”,比如幾千或幾百萬次,你只準備一次語句,然后根據需要多次執行準備好的語句,每次提供不同的值數組作為輸入。

還有很多庫可以讓你按名稱指定參數,給出命名值的哈希值,例如

INSERT INTO accountlist VALUES ("", :user:, :pwd:, :mail:, :date:)

{ 'user' => 'fred', 'pwd' => 'secret', 'mail' => '[email protected]', 'date' => today() }

...并且該庫會將其轉換為有效的 SQL 語句,如上所示。

更安全,更少頭痛,并且明顯更有效率。


查看完整回答
反對 回復 2022-09-17
  • 3 回答
  • 0 關注
  • 167 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號