2011-07-07 172 views
0

我有這樣的:多個陣列foreach循環的MySQL

foreach($textnode as $key => $value) { 

$value = stripslashes($value); 
$value = mysql_real_escape_string($value, $con); 


mysql_query("INSERT INTO paragraphs (textnodes, url) 
VALUES ('$value', '$url')"); 



} 

我的表有三列(textnodes,ytext和URL)

textnode和ytext都陣列.....我可以做這對於兩個數組?

+0

你是什麼意思,對於兩個數組? – Ikke

+0

我想知道如何將textnode數組和ytext數組中的值添加到它們各自的行中。 – re1man

回答

1

我想你想要的是使用普通的for循環,而不是:

for($i=0;$i<sizeof($textnode);$i++){ 

    $textnode[$i] = stripslashes($textnode[$i]); 
    $textnode[$i] = mysql_real_escape_string($textnode[$i], $con); 

    $ytext[$i] = stripslashes($ytext[$i]); 
    $ytext[$i] = mysql_real_escape_string($ytext[$i], $con); 

    mysql_query("INSERT INTO paragraphs (paragraphs, ytext, url) 
    VALUES ('$textnode[$i]', '$ytext[$i]', '$url')"); 

} 

這樣,你可以通過兩個循環一次(不是100%肯定這是你問的是什麼,但它是我最好的猜測)。


我還沒有測試過上面的代碼,但它應該工作。然而,它所遵循的風格和上面顯示的風格並不是很好。這裏有一些可以進行的改進:

  1. 而不是每個插入一個單獨的查詢,做一個查詢中的所有插入。這更好,因爲只有1個查詢而不是$ i查詢的開銷。

  2. 摘掉數據庫。目前,您似乎將業務邏輯與數據庫邏輯混合在一起。我可以看到這一點,因爲你正在逃避具有特定目的的文本字符串(textnode和ytext和url),並用mysql查詢插入它們。相反,抽象查詢以便業務邏輯不與db邏輯耦合是明智的做法。

  3. 一個較小的音符 - 你不應該調用stripslashes。如果您使用的是魔術引號,請立即禁用它,因爲它已被棄用,現在被認爲是不好的做法。

+0

由於您沒有轉義+連接變量,因此您的SQL查詢無法工作。使它'VALUES(''。$ textnodes [$ i]。'',...' –

+0

@caffein:它可能不起作用,因爲我沒有測試它,但該部分應該沒問題。 //www.php.net/manual/en/language.types.string.php#language.types.string.parsing – Cam

+0

不,工作原理雙引號中的變量不需要轉義 –

0

您試過serialize? 它將您的數組轉換爲「可存儲」形式(字符串)。當您再次從表中選擇unserialize時,會將字符串轉換回數組。

只是猜測,你的問題有點不清楚......