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

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

何時在MySQL中使用單引號,雙引號和反引號

何時在MySQL中使用單引號,雙引號和反引號

慕標5832272 2019-05-20 15:16:09
我正在嘗試學習編寫查詢的最佳方法。我也理解保持一致的重要性。到現在為止,我已經隨機使用單引號,雙引號和反引號而沒有任何實際想法。例:$query = 'INSERT INTO table (id, col1, col2) VALUES (NULL, val1, val2)';另外,在上述例子中,考慮到table,col1,val1等可以是變量。這是什么標準?你是做什么?我一直在這里閱讀類似問題的答案大約20分鐘,但看起來這個問題沒有明確的答案。
查看完整描述

9 回答

?
米脂

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

關于你的問題的SQL性質,上面有很好的答案,但如果你是PHP的新手,這也可能是相關的。)

也許重要的是要提到PHP處理單引號和雙引號字符串不同...

單引號字符串是'文字',幾乎是WYSIWYG字符串。PHP解釋雙引號字符串可能的變量替換(PHP中的反引號不完全是字符串;它們在shell中執行命令并返回結果)。

例子:

$foo = "bar";echo 'there is a $foo'; // There is a $foo
echo "there is a $foo"; // There is a bar
echo `ls -l`; // ... a directory list


查看完整回答
反對 回復 2019-05-20
?
胡子哥哥

TA貢獻1825條經驗 獲得超6個贊

反引號通常用于表示安全identifier并且不會意外地使用保留關鍵字。

例如:

Use `database`;

這里的反引號將幫助服務器理解database實際上是數據庫的名稱,而不是數據庫標識符。

可以對表名和字段名執行相同的操作。如果用反引號包裝數據庫標識符,這是一個非常好的習慣。

查看答案以了解有關反引號的更多信息。


現在關于雙引號和單引號(邁克爾已經提到過)。

但是,要定義一個值,您必須使用單引號或雙引號。讓我們看另一個例子。

INSERT INTO `tablename` (`id, `title`) VALUES ( NULL, title1);

在這里,我故意忘記title1用引號括起來。現在,服務器將采用title1列名稱(即標識符)。因此,要表明它是一個值,您必須使用雙引號或單引號。

INSERT INTO `tablename` (`id, `title`) VALUES ( NULL, 'title1');

現在,結合PHP,雙引號和單引號使您的查詢編寫時間更容易。讓我們在您的問題中看到查詢的修改版本。

$query = "INSERT INTO `table` (`id`, `col1`, `col2`) VALUES (NULL, '$val1', '$val2')";

現在,在PHP中使用雙引號,您將創建變量$val1,并$val2使用它們的值,從而創建一個完全有效的查詢。喜歡

$val1 = "my value 1";$val2 = "my value 2";$query = "INSERT INTO `table` (`id`, `col1`, `col2`) VALUES (NULL, '$val1', '$val2')";

會做的

INSERT INTO `table` (`id`, `col1`, `col2`) VALUES (NULL, 'my value 1', 'my value 2')


查看完整回答
反對 回復 2019-05-20
?
慕村225694

TA貢獻1880條經驗 獲得超4個贊

在MySQL中,這些符號是用來分隔查詢`,",'()

  1. "'用于封閉類似字符串的值"26-01-2014 00:00:00"'26-01-2014 00:00:00'。這些符號僅用于字符串,而不是聚合函數一樣now,summax。

  2. ` 用于封閉表或列名稱,例如 select `column_name` from `table_name` where id='2'

  3. ()簡單地包含查詢的一部分,例如 select `column_name` from `table_name` where (id='2' and gender='male') or name='rakesh'


查看完整回答
反對 回復 2019-05-20
?
倚天杖

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

MySQL和PHP中的字符串文字是相同的。

字符串是一個字節或字符序列,包含在單引號(“'”)或雙引號(“”“)字符中。

因此,如果您的字符串包含單引號,那么您可以使用雙引號來引用字符串,或者如果它包含雙引號,那么您可以使用單引號來引用字符串。但是,如果您的字符串包含單引號和雙引號,則需要轉義用于引用字符串的字符串。

大多數情況下,我們對SQL字符串值使用單引號,因此我們需要對PHP字符串使用雙引號。

$query = "INSERT INTO table (id, col1, col2) VALUES (NULL, 'val1', 'val2')";

你可以在PHP的雙引號字符串中使用一個變量:

$query = "INSERT INTO table (id, col1, col2) VALUES (NULL, '$val1', '$val2')";

但是,如果$val1$val2包含單引號,那將使您的SQL出錯。所以你需要在sql中使用之前將其轉義; 這mysql_real_escape_string就是為了什么。(雖然準備好的陳述更好。)


查看完整回答
反對 回復 2019-05-20
?
手掌心

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

結合PHP和MySQL,雙引號和單引號使您的查詢編寫時間變得更加容易。


$query = "INSERT INTO `table` (`id`, `col1`, `col2`) VALUES (NULL, '$val1', '$val2')";

現在,假設您正在使用直接post變量進入MySQL查詢,那么使用它:


$query = "INSERT INTO `table` (`id`, `name`, `email`) VALUES (' ".$_POST['id']." ', ' ".$_POST['name']." ', ' ".$_POST['email']." ')";

這是將PHP變量用于MySQL的最佳實踐。


查看完整回答
反對 回復 2019-05-20
?
莫回無

TA貢獻1865條經驗 獲得超7個贊

如果表cols和values是變量,那么有兩種方法:


使用雙引號""完整查詢:


$query = "INSERT INTO $table_name (id, $col1, $col2)

                 VALUES (NULL, '$val1', '$val2')";

要么


 $query = "INSERT INTO ".$table_name." (id, ".$col1.", ".$col2.")

               VALUES (NULL, '".$val1."', '".$val2."')";

單引號'':


$query = 'INSERT INTO '.$table_name.' (id, '.$col1.', '.$col2.')

             VALUES (NULL, '.$val1.', '.$val2.')';

``當列/值名稱類似于MySQL保留關鍵字時,請使用反向標記。


注意:如果您使用表名表示列名,那么請使用這樣的返回標記:


`table_name`。`column_name` < - 注意:. 從后面的刻度中排除。


查看完整回答
反對 回復 2019-05-20
?
慕森王

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

這里有很多有用的答案,通常最終分為兩點。


BACKTICKS(`)用于標識符名稱。

單引號(')用于值。

和@MichaelBerkowski說


反引號用于表和列標識符,但僅在標識符是MySQL保留關鍵字時,或者當標識符包含空格字符或超出限制集的字符時才需要(見下文)。通常建議避免使用保留關鍵字作為保留關鍵字盡可能使用列或表標識符,避免引用問題。


但是有一種情況,即標識符既不是保留關鍵字,也不包含有限集之外的空格或字符,但必須圍繞它們進行反引號。



123E10是有效的標識符名稱,但也是有效的INTEGER文字。


[沒有詳細說明如何獲得這樣的標識符名稱],假設我想創建一個名為的臨時表123456e6。


反推沒有錯誤。


DB [XXX]> create temporary table `123456e6` (`id` char (8));

Query OK, 0 rows affected (0.03 sec)

不使用反引號時出錯。


DB [XXX]> create temporary table 123451e6 (`id` char (8));

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '123451e6 (`id` char (8))' at line 1

但是,它123451a6是一個非常精細的標識符名稱(沒有后退標記)。


DB [XXX]> create temporary table 123451a6 (`id` char (8));

Query OK, 0 rows affected (0.03 sec)

這完全是因為1234156e6它也是一個指數。


查看完整回答
反對 回復 2019-05-20
  • 9 回答
  • 0 關注
  • 1838 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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