2015-03-18 1 views
1

Я конвертирую некоторый код Perl в PHP, и большая часть его содержит сложные строки SQL с одинарными и двойными кавычками. Это легко обрабатывается в Perl, используя qq// цитату, как так:PHP-эквивалент Perl qq //?

qq/SELECT * FROM tablename WHERE "MixedCaseColName" = 'string'/ 

Лучшее, что я могу сделать в PHP, это выбрать либо одинарной или двойной процитировать для жала, а затем бежать один или другой тип кавычек:

"SELECT * FROM tablename WHERE \"MixedCaseColName\" = 'string'" 

Это прекрасно работает для коротких строк, но это боль для очень длинных последовательностей с множеством цитат, чтобы найти и убежать. Любые предложения по лучшему способу сделать это на PHP, что просто, как Perl?

+2

См. Http://php.net/language.types.string для обработки строки цитирования в PHP. Метод heredoc пригодится для того, чтобы не беспокоиться о одиночных или двойных кавычках. – bloodyKnuckles

ответ

1

Не так удобно или компактно, как операторы цитаты Perl, но есть метод цитирования, который допускает как одиночные, так и двойные кавычки без экранирования. Это называется heredoc.

Пример:

<?php 

$string = <<<EOT 

SELECT * FROM tablename WHERE "MixedCaseColName" = 'string' 

EOT; 

?> 

Вы можете назвать идентификатор, что вы хотите, до тех пор, пока вы используете только буквенно-цифровые и символы подчеркивания и не должно начинаться с цифры.

Важно отметить, что первый идентификатор должен быть последним в строке, а последний идентификатор вместе с точкой с запятой должен быть ТОЛЬКО на линии, ничего до или после, без пробелов, ничего.

Подробнее об этом здесь: http://php.net/language.types.string

+0

Спасибо за предложение, PERL также имеет ссылку на heredoc, но это всасывает две дополнительные строки кода и требует, чтобы строка была оставлена ​​в силе. Я бы предпочел что-то, что держит код плотным и правильно отступом. – steevithak

+0

и heredocs оставляют новую строку в конце строки (по крайней мере, на Perl) – ysth

+0

@steevithak В PHP нет ничего подобного qq. Самый близкий подход - HEREDOCS – felipsmartins

1

Вы можете использовать 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

+0

@steevithak у вас есть продвижение? –

-3

Пожалуйста, обратите внимание на perldoc perldata. В нем объясняется, как Perl обрабатывает строки с одним и двумя кавычками, которые очень похожи на строки bash.

q/.../ и qq/.../ эквивалентны '...' и "..." но позволяют разделителем быть изменены таким образом, что встроенные кавычки не должны быть экранированы.

+4

Я думаю, что вы неправильно поняли вопрос – ysth