Я конвертирую некоторый код Perl в PHP, и большая часть его содержит сложные строки SQL с одинарными и двойными кавычками. Это легко сделать в Perl, используя qq//
цитирую так:
qq/SELECT * FROM tablename WHERE "MixedCaseColName" = 'string'/
Лучшее, что я могу сделать в PHP — это выбрать одинарные или двойные кавычки для строчки, а затем экранировать один или другой тип кавычек:
"SELECT * FROM tablename WHERE \"MixedCaseColName\" = 'string'"
Это работает хорошо для коротких строк, но это боль для очень длинных последовательностей с множеством кавычек, чтобы найти и убежать. Любые предложения о лучшем способе сделать это в PHP, который прост как Perl?
Вы можете использовать синтаксис heredoc: <<<
, После этого оператора предоставляется идентификатор, затем новая строка. Далее следует сама строка, а затем снова тот же идентификатор, чтобы закрыть цитату.
Закрывающий идентификатор должен начинаться в первом столбце строки. Кроме того, идентификатор должен следовать тем же правилам именования, что и любая другая метка в PHP: он должен содержать только буквенно-цифровые символы и символы подчеркивания и должен начинаться с нецифрового символа или символа подчеркивания.
Попробуйте с этим примером:
<?php
$query = <<<EOD
SELECT * FROM tablename WHERE "MixedCaseColName" = 'string'/
EOD;
echo $query;
?>
Узнайте больше на:
http://php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc
Не такой удобный или компактный, как операторы кавычек Perl, но есть метод кавычек, который позволяет использовать как одинарные, так и двойные кавычки без экранирования. Это называется Heredoc.
Пример:
<?php
$string = <<<EOT
SELECT * FROM tablename WHERE "MixedCaseColName" = 'string'
EOT;
?>
Вы можете присвоить этому идентификатору любое имя, если вы используете только буквы, цифры и символы подчеркивания, а не начинаются с цифры.
Важно отметить, что первый идентификатор должен быть последним в строке, а последний идентификатор вместе с точкой с запятой должен быть ЕДИНСТВЕННЫМ в строке, ничего до или после, без пробелов, ничего.
Подробнее об этом здесь: http://php.net/language.types.string
Пожалуйста, посмотрите на perldoc perldata
. Он объясняет, как Perl обрабатывает строки в одинарных и двойных кавычках, которые очень похожи на строки bash.
q/.../
а также qq/.../
эквивалентны '...'
а также "..."
но допускается изменение разделителя, чтобы исключить необходимость экранирования встроенных кавычек.