簡體   English   中英

mysql / php中單引號的類型

[英]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'就是這樣,您正在選擇一個包含字母sel等的文字字符串...它被視為字符串,而不是sql關鍵字或字段/表名稱。

那意味着

SELECT ...
FROM 'food'

失敗,因為您嘗試從文字字符串中進行選擇。 它不是表名,也不能從中選擇。

該鍵取決於您的鍵盤布局,但通常是重音符號(`)。

更多信息在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM