2012-06-17 16 views
0

好,第一個問題,所以這裏去,

上一個模塊我寫這封信需要把電子郵件模板到MySQL的啓動運行的函數D b。問題是這些都是smarty模板並使用{$ vars},現在當我在PHP中執行此操作時,{$ vars}被解釋爲在運行之前放入sql查詢中的PHP變量。

我該如何告訴PHP不要將「{$ var}」解釋爲變量而是字符串?

這是當前查詢:

$sqlEmail1 = "INSERT INTO `tblemailtemplates` (`type`, `name`, `subject`, `message`, `attachments`, `fromname`, `fromemail`, `disabled`, `custom`, `language`, `copyto`, `plaintext`) 
VALUES ('general', 'IPGeek - Custom Email 1', 'Password Reset', 'Some text that contains {$company_name} among other things', '', '', '', '', '1', '', '', 0)" 

,這應該是電子郵件模板上面創建:

Some text that contains {$company_name} among other things 

但它創造這個代替:

Some text that contains 

任何幫助將非常樂意收到!

回答

6

當在雙引號或heredoc中指定字符串時,其中的變量 被解析。

注意:與雙引號和heredoc語法不同,變量和 特殊字符的轉義序列在單引號字符串中出現時不會被展開爲 。

使用',而不是"

echo '{$var}'; 

或逃生$

echo "{\$var}"; 

瞭解更多:php strings

UPDATE:最小的努力修復只是增加\$

$sqlEmail1 = "INSERT INTO `tblemailtemplates` (`type`, `name`, `subject`, `message`, `attachments`, `fromname`, `fromemail`, `disabled`, `custom`, `language`, `copyto`, `plaintext`) 
VALUES ('general', 'IPGeek - Custom Email 1', 'Password Reset', 'Some text that contains {\$company_name} among other things', '', '', '', '', '1', '', '', 0)"; 
+0

已經嘗試過,但這樣做的問題是它打破了第一個'('一般')的查詢是否有另一個字符,我可以用來包含值? –

+0

您可以對值使用雙引號,對整個字符串使用單引號。或者,您可以使用反斜槓\來避免字符串內的單引號。當我必須學習這些時,我將這些琴絃想象成一種Baboushka傀儡。一個傀儡包含下一個傀儡,每個傀儡可以縮小爲一組單引號或雙引號。 – mch

+0

我試圖在'''中附加整個查詢,並在查詢中轉義''',沒有運氣。將查詢包含在'''中並轉義'$'產生相同的結果。 我甚至試着連接查詢'「INSERT ...」。「{$ var}」。「...」;'仍然 –

0

如何正確轉義值是多少?

我打賭有'(撇號)在您的模板。如果是這樣,它會破壞你的SQL語法。

+0

然而,它們正確地被加密了,它的'$'是導致這個問題的原因,並且之前已經試過了: '$ sql = mysql_real_escape_string('It's {$ your_name}'); mysql_query(「INSERT ... {$ sql}「);' 但是,無論如何謝謝你:-) –