2012-12-27 87 views
1

這是正確的語法嗎?雙引號內的變量

$current_renewal_date = $wpdb->get_results(
        " 
        SELECT expiry_date 
        FROM bid_tag 
        WHERE id = $renewal_tag_id 
        LIMIT 1 
        " 
       ); 

OR

$current_renewal_date = $wpdb->get_results(
        " 
        SELECT expiry_date 
        FROM bid_tag 
        WHERE id = {$renewal_tag_id} 
        LIMIT 1 
        " 
       ); 
+0

第一個。第二個甚至可能實際上工作。 – dmarra

+1

當需要引用'$ renewal_tag_id ['some_index']'時,第二個更容易閱讀和更方便。但是,在這種情況下,您應該考慮'$ wpdb-> get_var($ wpdb-> prepare(「SELECT .. WHERE id =%s LIMIT 1」,$ renewal_tag_id))'以避免SQL注入。 – DCoder

+0

帶有SELECT語句的SQL注入? – dcolumbus

回答

1

都正確。後者只是用來避免歧義,如果你想引用$foo似與不$foobar

"{$foo}bar" 
1

他們都是正確的*和等效。當你插入一個變量而不訪問數組中的元素時,大括號是可選的。

*使用參數化查詢請

0

我不知道,如果你真的可以說是有一個正確的形式把一個字符串中的變量,但最靈活,確保工作會:

$current_renewal_date = $wpdb->get_results(
        " 
        SELECT expiry_date 
        FROM bid_tag 
        WHERE id = ".$renewal_tag_id." 
        LIMIT 1 
        " 
       ); 

使用此語法至少有兩個好處,而不是僅將該變量放在字符串中。

可變誤解

1)當你把字符串中的變量,如果你需要的變量與其他文本混合,你可能會遇到問題。

例子:

$string = "My ID is AB$variableCD"; 

什麼是變量?它是$變量?它是$ variableC嗎?或者$ variableCD?關於您正在使用的語法,有很多解釋。這時候你做不發生

$string = "My ID is AB".$variable."CD"; 

陣列使用

2)你不能簡單的使用有數組索引變量時,你的字符串

實例中混合使用它們:

$string = "The largest country is $options[countries in the world][$index]"; 

會給你* PHP解析錯誤:語法錯誤,意外T_ENCAPSED_AND_WHITESPACE,期待']'*

同時使用下面將很好地工作:

$string = "The largest country is ".$options['countries in the world'][$index]; 

而一點點額外的,是不是真的語法的問題...

3)而實際上是有性能優勢,那就是爲你的字符串使用'而不是'的可能性。使用'會產生字符串字面值,也就是說,它不會被解析,這在處理大字符串時會提高性能。

$string = 'hello'; 

代替

$string = "hello"; 
+2

爲什麼這會比問題中的更正確? – eis

+0

你是什麼意思,最「肯定的工作」?他們都工作。字符串插值不是某種隨機過程。 – Ryan

+0

對不起,忘了解釋:這是因爲你避免了兩個大問題:1)你避免了字符逃跑的情況。 2)你避免了名字串聯的問題。我會修改我的答案,添加一些例子,你會明白我的意思。 –

0

他們都工作。首選的方法是使用預準備語句和綁定參數。