Concat Help: Добавление строки в Query в mysql / php - PullRequest
0 голосов
/ 19 мая 2011

Я думал, что смогу понять это самостоятельно, но, очевидно, я борюсь с этим. Первоначально у меня был следующий код:

 $query = "SELECT cards.card_id,title,description,meta_description,seo_keywords,price FROM cards,card_cheapest WHERE cards.card_id = card_cheapest.card_id ORDER BY card_id";
$result = mysql_query($query);


// Open file for writing
$myFile = "googleproducts.txt";
$fh = fopen($myFile, 'w') or die("can't open file");

// Loop through returned data and write (append) directly to file
fprintf($fh, "%-200s %-200s  %-800s   %-200s %-800s\n", "id", "label","description","price","seo keywords");
fprintf($fh, "\n");
while ($row = mysql_fetch_assoc($result)) {
 fprintf($fh, "%-200s  %-200s  %-800s  %-200s  %-800s\n", $row['card_id'], $row['title'], $row['description'],$row['price'], $row['seo_keywords']);
}

// Close out the file
fclose($fh);
?>

Что мне нужно было сделать, так это добавить «By Amy» к заголовку, когда файл печатался в текстовый файл, поэтому я подумал, что я бы с этим согласился:

$query = "SELECT cards.card_id,concat(title, "By Amy"),description,meta_description,seo_keywords,price FROM cards,card_cheapest WHERE cards.card_id = card_cheapest.card_id ORDER BY card_id";

Каждый раз, когда я пытался запустить файл, я получал сообщение об ошибке "(!) Parse error: синтаксическая ошибка, неожиданный T_STRING в C: \ wamp \ www \ output.php в строке 22". Я знаю, что запрос работает в моем продолжении Pro, но когда я пытаюсь включить его в фактический файл, это файлы

Ответы [ 2 ]

1 голос
/ 19 мая 2011

Это потому, что вы заключаете строку в двойных кавычках (Эми) в другую строку в двойных кавычках (SELECT ... card_id).

Анализатор PHP не понимает, что происходит, поэтому вы получаете эту ошибку еще до того, как ваш запрос будет отправлен в базу данных.

Escape внутренней строки, изменив два внутренних "на \"

Например:

$query = "SELECT cards.card_id, concat(title, "By Amy"), 
    description, meta_description, 
    seo_keywords, price 
FROM cards, card_cheapest 
WHERE cards.card_id = card_cheapest.card_id 
ORDER BY card_id";

до

$query = "SELECT cards.card_id, concat(title, \"By Amy\") AS TitleConcat, 
    description, meta_description, 
    seo_keywords, price 
FROM cards, card_cheapest 
WHERE cards.card_id = card_cheapest.card_id 
ORDER BY card_id";

EDIT: обратите внимание на добавление AS TitleConcat после поля concat. Это переименовывает столбец в TitleConcat, а затем вы можете получить к нему доступ $row['TitleConcat'].

Альтернативой является использование AS title, и изменение будет прозрачным для остальной части вашего кода (т. Е. Вам не придется менять $row['title'] на $row['TitleConcat']), однако в целом это немного рискованно по моему мнению (но для кода, который вы разместили, все выглядит отлично).

0 голосов
/ 19 мая 2011

Один интересный метод, который я использую для длинных строк, чтобы выяснить, какой тип цитирования использовать, это heredocs .Пример heredoc выглядит примерно так:

$string = <<<STRING
Lots of text
'this works'
"and this"
You can even use $variable expansion
STRING;

Во-первых, <<< указывает на начало heredoc.Затем вы передаете ему имя, чтобы определить, где останавливается ваша многострочная строка.В этом случае мы используем STRING.Тем не менее, вы можете использовать любое имя, которое вы хотите.Недостаток использования heredocs заключается в том, что для того, чтобы сообщить php, что ваша многострочная строка завершена, вы должны использовать то же имя идентификатора с точкой с запятой, что и первая запись в строке.Итак, это:

$string = <<<STRING
Lots of text
'this works'
"and this"
You can even use $variable expansion
    STRING; // This won't do what you expect it to

Не сработает из-за пробелов, которые его проходят.Также вы не можете отказаться от вызова функций:

$string = <<<STRING
Lots of text
'this works'
"and this"
You can even use $variable expansion
my_function_call() <-- this gets interpreted as text, not the result of the function
STRING; // This won't do what you expect it to

Чтобы принять во внимание ваш пример:

$query = <<<SQL
SELECT cards.card_id,concat(title, "By Amy"),description,meta_description,seo_keywords,price
FROM cards,card_cheapest 
WHERE cards.card_id = card_cheapest.card_id 
ORDER BY card_id
SQL;

Так что если вы делаете что-то вроде вывода большого количества SQL, безнужно полагаться на вызовы функций, это прекрасно работает.Однако для более коротких строк я рекомендую использовать стандартную строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...