PHP MySQL Вставить {$clientname} как строку, а не переменную PHP

Хорошо, первый вопрос, так что вот,

Функция, которая запускается при активации модуля, который я пишу, должна поместить шаблоны электронной почты в базу данных MySQL. Проблема в том, что это умные шаблоны и они используют {$vars}, теперь, когда я делаю это в PHP, {$vars} интерпретируются как переменные PHP, которые нужно поместить в запрос sql перед запуском.

Как указать 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 

Любая помощь будет очень рада!


person Lawrence Goldstien    schedule 17.06.2012    source источник


Ответы (2)


Когда строка указана в двойных кавычках или с помощью heredoc, в ней анализируются переменные.

Примечание. В отличие от синтаксиса с двойными кавычками и heredoc, переменные и escape-последовательности для специальных символов не будут раскрываться, если они встречаются в строках с одинарными кавычками.

Используйте ' вместо "

echo '{$var}';

Или экранируйте $:

echo "{\$var}";

Подробнее: строки php

ОБНОВЛЕНИЕ: исправление с минимальными усилиями — просто добавить \ перед $:

$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)";
person Zbigniew    schedule 17.06.2012
comment
Уже пробовал это, но проблема с этим заключается в том, что он прерывает запрос при первом '('общий') есть ли другой символ, который я могу использовать для хранения значений? - person Lawrence Goldstien; 17.06.2012
comment
Вы можете использовать двойные кавычки для значений и одинарные кавычки для всей строки. Или вы можете избежать одинарных кавычек внутри строки с помощью обратной косой черты \. Когда мне пришлось этому научиться, я представил эти струны чем-то вроде марионетки Бабушки. Одна марионетка содержит следующую марионетку, каждую марионетку можно представить как набор одинарных или двойных кавычек. - person mch; 17.06.2012
comment
Я попытался заключить весь запрос в ' и экранировать ' внутри запроса, но безуспешно. Включение запроса в " и экранирование $ приводит к тому же результату. Я даже пытался объединить запрос "INSERT... ".'{$var}'."..."; и все равно не повезло. - person Lawrence Goldstien; 17.06.2012
comment
Как ни странно, теперь работает (спасибо @des), очень странно, и я избежал символов $, но после повторного ввода запроса вручную он, кажется, теперь работает! Спасибо! - person Lawrence Goldstien; 17.06.2012

Как насчет правильного экранирования значений?

Бьюсь об заклад, в ваших шаблонах есть '(апострофы). Если это так, это нарушит ваш синтаксис SQL.

person rodneyrehm    schedule 17.06.2012
comment
Есть, однако, они должным образом экранированы, это $, который вызывал проблему, и ранее пытался это сделать: $sql = mysql_real_escape_string('It's {$your_name}'); mysql_query("INSERT... {$sql}"); Но все равно спасибо :-) - person Lawrence Goldstien; 17.06.2012