$keyyy = null;
while ($r = mysqli_fetch_array($rs)){
$tagg = array($r['name']);
foreach ($tagg as $key) {
$keyyy = $key.',';
}
UPDATE `blog` SET
`tags` = '{$keyyy}'
WHERE url = 'XXX'
}
印出結果是
1,2,3,4,5,
只是為什麼我 update 到數據表,都只有 1,
呢?
而不是 1,2,3,4,5,
假設 A 文章tag是 1,2,3,
B文章tag是 3,4,5,
(確定篩選好了)
如果在 $keyyy = $key.',';
加上 .
變 $keyyy .= $key.',';
B文章被更新的時候會變成 1,2,3,3,4,5,
....以此類推,會把前一個文章的 tag 累加上來
如果不加 .
又只會把最後一個字串更新上去...
A文章: 1,
B文章:3,
這是什麼問題??
沒看到你印出在哪裡...
我猜你應該是要這樣
$keyyy .= $key.',';
PHP不熟,
不過感覺一開始的 $keyyy = null 加上我改的部份應該會導致錯誤,
宣告的地方是不是要改成
$keyyy = '';
我試過 $keyyy .= $key.',';
了
但他會把上一個文章的 tag 累加上來
所以我不解的是,竟然都可以把上一個文章所有tag都累加過來了,為什麼我單純 $keyyy = $key.',';
卻不能得到所有 tag,永遠都是第一個被抓到而已
改成這樣
while ($r = mysqli_fetch_array($rs)){
$keyyy = '';
$tagg = array($r['name']);
foreach ($tagg as $key) {
$keyyy .= $key.',';
}
UPDATE `blog` SET
`tags` = '{$keyyy}'
WHERE url = 'XXX'
}
前面加 $keyyy = ''; 將上一個文章的資料清掉
$keyyy .= $key.','; 將這一篇文章的資料累加
我也很不解, 照理說應該是取最後一筆資料才對,
除非你是由大到小...
喔不對,是最後一筆
用了你的方式後,我發現又回到只取最後一筆了。好怪。。
asys0512
這樣呢?
while ($r = mysqli_fetch_array($rs)){
$keyyy = '';
foreach ($r as $key) {
$keyyy .= $key['name'].',';
}
UPDATE `blog` SET
`tags` = '{$keyyy}'
WHERE url = 'XXX'
}
出現錯誤:Illegal string offset 'name'
這問題真的也太有趣。。。一開始我直接印 foreach 取出來的 $keyyy時,是可以順利印出 1,2,3,4,5,
的
但是 UPDATE 之後反而只有最後一筆 5,
有進去。。。
然後用 .=
這招竟然把上一個文章的全部也加進來,這是啥鬼問題。。。。
你沒有用我最後發的那個方法吧,
那個方法應該不會這樣。
其實你最好拿個紙筆寫一下流程...
思考一下你的程式是怎麼跑的...
$rs = $do->query(
"SELECT
t.name as name,
tr.object_id as object_id
FROM wp_terms as t
JOIN wp_term_relationships as tr ON tr.term_taxonomy_id = t.term_id
JOIN blog as b ON b.url = tr.object_id "
);
while ($r = mysqli_fetch_array($rs)){
$keyyy = '';
$keyyy .= $r['name'];
$do->query(
"UPDATE `blog` SET
`tags` = '{$keyyy}'
WHERE url = '{$r['object_id']}' "
);
}
我有用你那個方式,但都一樣只會丟最後的進去資料庫。。很怪
而我現在改成這樣,結果也是一樣,所以我搞不懂哪裡有問題
仔細看了一下裡面那麼foreach跟浩瀚星空說得一樣沒有用啊...
改成這樣呢?
$keyyy = null;
while ($r = mysqli_fetch_array($rs)){
$keyyy .= $r['name'];
}
UPDATE `blog` SET
`tags` = '{$keyyy}'
WHERE url = 'XXX'