2015-07-09 190 views
0

我有一個PHP文件下面的查詢工作正常:有人可以解釋這段代碼的語法嗎?

$query = "SELECT `name` FROM users WHERE name='".mysqli_real_escape_string($link,$name)."'"; 

我得到了它的教程,所以我試圖環繞的語法我的頭。具體來說這個部分:

'".mysqli_real_escape_string($link,$name)."' 

如果函數mysql_real_escape_string()返回一個字符串,爲什麼需要雙引號?另外,我明白在PHP的。意味着連接,所以這個代碼添加到空字符串「」?

請幫忙,我真的搞砸了這一個。

回答

3

雙引號是需要的,因爲這是使用字符串連接來組成查詢。這是做這樣的事情作爲mysqli司機有佔位符的支持非常的混亂方式:

$query = "SELECT `name` FROM users WHERE name=?"; 

?代表您的數據會去。然後使用bind_param方法在其中添加您的$name值。

如果你對使用佔位符有紀律,你將不必擔心引用或proper escaping

0

在大多數計算機程序中有兩種類型的引號,'"。您可以使用兩個相同類型的字符串,例如'abc'"def"。但是,當您需要在其他引號內引用引號時,您可以將'"'。該語法不響應不同類型的報價。這裏適用同樣的原則。

在這種情況下,代碼的行可以被表示爲

`$query = "SELECT `name` FROM users WHERE name=''";` 

但單引號需要在他們的內容。這是通過串聯添加的。

+0

爲什麼這個不行?$ query =「SELECT'name' FROM users WHERE name ='mysqli_real_escape_string($ link,$ name)'」; –

+0

@KarlNeumann對於這個錯字感到抱歉。報價附件存在問題。 – bcdan

0

單引號標識您正在構建的SQL查詢中的字符串。

您的查詢將導致例如:

SELECT `name` FROM users WHERE name='John'; 

(注意周圍約翰引號)

的反引號用於景觀對象的名稱。

0

此代碼中沒有空字符串。最後的"'"只是關閉在name='"中打開的單引號字符串。在mysql查詢中,字符串必須用引號引起來,這裏函數返回用單引號括起來的字符串。這可以澄清這樣的:

$name = mysqli_real_escape_string($link,$name); 
$query = "SELECT `name` FROM users WHERE name='".$name."'"; 

假設如果變量$name = 'Joffery' 然後$query變量將被打印出來這樣

SELECT `name` FROM users WHERE name='Joffery' 
相關問題