[英]Type of apostrophe in mysql/php
我在mysql中遇到了以下查詢示例:
SELECT `id`, `food`, `calories`, `healthy_unhealthy` FROM `food` WHERE 1 //works
將其輸入Codelobster,結果如下:
$query = "SELECT 'id', 'food', 'calories', 'healthy_unhealthy' FROM 'food'"; //fails
撇號不同。 它失敗並顯示:
您的SQL語法有誤; 檢查與您的MySQL服務器版本相對應的手冊以獲取正確的語法,以在行“ food”附近使用
如果我選擇一個可行的並將其放入$ query中,它就會奏效。
$query = "SELECT `id`, `food`, `calories`, `healthy_unhealthy` FROM `food`"; //works
如果在php編輯器上執行此操作,則撇號不起作用,因為它是不同的。 僅僅憑這種改變就不能使它起作用。 有沒有可以用於該樣式的鍵或php編輯器中的設置?
反引號是mysql語法,用於包裝表名和表以明確地標識它們。 常規單引號用於常規字符串定界符。 區別是例如
`id`
引用一列
'id'
只是一個字符串。 或者,您可以對列或表名使用NO反引號,只要它們不是mysql保留字即可(無論如何您都不應這樣做)
例如,如果在名為bar
的表中有一個名為foo
的列,則可以執行
$sql = "select `foo` from `bar`";
要么
$sql = "select foo from bar";
但是,例如,如果您有一個名為count
的列,則必須將其包裝在反引號中,因為count
是mysql中的保留字:
$sql = "select `count` from bar";
..但是如上所述,您無論如何都不應該將列或表命名為保留字。 這是不好的做法。 盡管如果使用反引號,mysql允許這樣做,但並非所有數據庫都支持此功能,因此會使查詢的可移植性降低。
`稱為反引號,它們使被解釋的內容在字面上100%解釋。 實際上,這可能允許您將具有句法含義的字符實際用作表名或數據庫名(除其他外)。 盡管在表名等中使用具有句法含義的字符是不好的做法,但是自動化程序必須考慮到這一點,因此將所有表名和列名都用反引號引起來。
反引號用於在MySQL中轉義保留字,例如,如果表中有一個名為select
的字段,則
SELECT select
FROM ...
這將是一個語法錯誤,因為MySQL無法分辨出什么是字段以及SQL“腳手架”的組成部分。 但是,如果您使用反引號:
SELECT `select`
FROM ...
然后它告訴MySQl select
是一個字段(或表名),並且不被視為sql關鍵字。
采用單'
引號,你做的東西轉換成字符串:
SELECT 'select'
FROM ...
現在'select'
就是這樣,您正在選擇一個包含字母s
, e
, l
等的文字字符串...它被視為字符串,而不是sql關鍵字或字段/表名稱。
那意味着
SELECT ...
FROM 'food'
失敗,因為您嘗試從文字字符串中進行選擇。 它不是表名,也不能從中選擇。
該鍵取決於您的鍵盤布局,但通常是重音符號(`)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.