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

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')

TA貢獻1880條經驗 獲得超4個贊
在MySQL中,這些符號是用來分隔查詢`
,"
,'
和()
。
"
或'
用于封閉類似字符串的值"26-01-2014 00:00:00"
或'26-01-2014 00:00:00'
。這些符號僅用于字符串,而不是聚合函數一樣now
,sum
或max
。`
用于封閉表或列名稱,例如select `column_name` from `table_name` where id='2'
(
并)
簡單地包含查詢的一部分,例如select `column_name` from `table_name` where (id='2' and gender='male') or name='rakesh'
。

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
就是為了什么。(雖然準備好的陳述更好。)

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的最佳實踐。

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` < - 注意:. 從后面的刻度中排除。

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它也是一個指數。
添加回答
舉報