2011-05-19 76 views
0

我想我可以自己弄清楚這一點,但顯然我正在努力。我原本下面的代碼:Concat Help:在mysql/php中添加字符串到查詢中

$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); 
?> 

我需要什麼做的是增加「艾米」當文件被打印到一個文本文件的標題,所以我認爲是我wouldconcat它像這樣:

$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"; 

每當我嘗試運行該文件時,我會在第22行的C:\ wamp \ www \ output.php中出現錯誤,說明「(!)解析錯誤:語法錯誤,意外的T_STRING」。我知道該查詢在我的續集親,但當我試圖將其納入實際的文件中它的文件

回答

1

這是因爲你正在一個雙引號字符串(通過Amy)封閉在另一個雙引號字符串(SELECT ... card_id的)。

PHP解析器不知道發生了什麼,因此在將查詢發送到數據庫之前就會出現該錯誤。

$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"; 

編輯::請注意的concat字段之後添加AS TitleConcat

通過改變兩個內 「到\」

例如逃離內部串。這將重命名列TitleConcat,然後你可以通過$row['TitleConcat'].

另一種方法是使用AS title和變化將是透明的,你的代碼的其餘部分(即訪問它,你不會有改變$row['title']$row['TitleConcat'] ),但是一般來說這在我看來有點冒險(但是對於你發佈的代碼看起來很好)。

+0

不幸的是,當我加入了$ query = 「SELECT cards.card_id,CONCAT(標題,\」 艾米\「), 描述,meta_description,seo_keywords,價格 從銀行卡,card_cheapest WHERE cards.card_id = card_cheapest.card_id ORDER BY card_id「;我收到以下結果: (!)注意:未定義的索引:第38行的C:\ wamp \ www \ output.php中的標題我是否需要更改最後的fprintf以反映此更改? – 2011-05-19 17:35:09

+0

是的。 'concat'改變字段名 - 我會編輯我的答案來幫助你。 – jedwards 2011-05-19 17:38:56

0

一個有趣的方法,我用長字符串擺脫搞清楚什麼類型的引用是使用heredocs。樣本定界符看起來是這樣的:

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

首先,在<<<表示定界符的開始。然後,您通過它的名稱來確定您的多行字符串停止的位置。在這種情況下,我們使用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語句,而無需依靠函數調用,這很好地工作。對於較短的字符串,我建議使用標準字符串。

相關問題