為什麼php在向mysql提交資料時變數外要用單引號?

時間 2021-06-03 01:50:56

1樓:擼程式碼的鄉下人

$s = 'ss';

mysql_query("INSERT INTO Comment (comment, date, username, signature) VALUES ('$s', NOW(), '111', $signature)");

等於

$s = 'ss';

$s1 = "INSERT INTO Comment (comment, date, username, signature) VALUES ('$s', NOW(), '111', $signature)";

mysql_query($s1);

PHP 在string內可以使用變數,變數會在賦值時合併在裡面,但是建議這樣使用。

也就是說進入 mysql_query 內的值是:

INSERT INTO Comment (comment, date, username, signature) VALUES ('ss', NOW(), '111', $signature)

mysql_query 方法傳入的值是乙個SQL,SQL對於string型別要加引號,這是SQL的規範,與PHP無關。

MixPHP —— 基於 Swoole 的常駐記憶體型 PHP 框架

mixstart/mixphp

2樓:eechen

$s='ss';

mysql_query("

INSERT INTO Comment (comment, date, username, signatureVALUES ('$s', NOW(), '111', $signature)

");對SQL語句中'$s'的解釋:

因為$s變數對應comment欄位,而該字段的型別是字串.

在SQL語法中,字串賦值,就應該用單引號或雙引號括起來.

又因為PHP中整個SQL語句使用了雙引號,所以裡面的變數$s會被解析.

題外話:

PHP7已經不支援mysql擴充套件,建議使用mysqli或者pdo擴充套件.

防禦SQL注入應該使用預處理引數化查詢,比如:

$db = new mysqli($host, $user, $pass, $name, $port);

$db->set_charset('utf8'); // 指定編碼(重要)

$sql = "

INSERT INTO `comment` (comment, date, username, signature)

VALUES34;;

$stmt = $db->prepare($sql); // 預處理

$stmt->bind_param('ssss', $var1, $var2, $var3, $var4); // 引數化

$stmt->execute(); // 查詢

var_export(

($stmt->affected_rows === -1 || $stmt->affected_rows === 0) ? false : $stmt->insert_id

); // INSERT操作結果

Mysql為什麼選擇reapeatable read 作為預設的事務隔離級別

TY Liu 結論 如果你的 binlog 是 row 行 或者 mixed 混用 的話,用 rc 就可以了.同乙個事務裡,如果前後兩次讀到的值不一致,自然會讓人想到這是在別的地方被改變了,這是符合人直覺的.比如像銀行卡裡面少錢了卻讀不出來 假定事務週期很長 這反倒是不符合直覺的 但是如果你的 bi...

php為什麼會這樣顯示

Shirne 出現這個問題的原因,其他答主都有說明。我的解決方法就是,需要取整 保留精度 的情況,都使用round轉換 num round 0.1 0.7 10 第二個引數表示保留精度 money round 0.1 0.7 10,2 int 這種寫法,屬於強制型別轉換,比如從客戶端接收乙個id引數...

PHP 為什麼沒有取代 Python ?

飄逸 PHP 和python是兩種不同的語言。它們都是指令碼工具,都是為了更好的解決一些場景的問題而孕育而生的。它們可能會隨著使用的場景消失而消失,比如說 語言基本上就是隨著window 的 VB一樣。 Abby Chau 學乙隻新語言比起用一種不合適的語言來控制非官方API 更省力。Php 還可以...