2012-11-22 26 views
0

我從以下url中檢索下面提到的代碼的一部分:insert multiple rows via a php array into mysql 但是,我面臨一個問題。我的代碼如下:在表上添加乘法行。 PHP-MySQL

//create an array 
$array = array(); 

//add some values 

//1st var_dump($array); 
var_dump($array); 

$msql = array(); 
foreach($array as $row) { 
    $msql[] = '('.$row['trend'].', '.$row['image_url'].','.$row['sku'].')'; 
} 

var_dump($msql); 



$insertData = "INSERT INTO Data_Info (trend, image_url,sku) VALUES ".implode(',', $msql); 
mysql_query($insertData) or die(mysql_error()); 

mysql_close($conn); 

我創建的表格包含三個字段 - > trend,image_url,sku。第一次的var_dump

結果:

array(6) { 
    [0]=> string(7) "mytrend" 
    [1]=> string(70) "http://re.n.o.coat.png" 
    [2]=> string(12) "militarycoat" 
    [3]=> string(7) "mytrend" 
    [4]=> string(73) "http://re.n.o.padded.png" 
    [5]=> string(15) "signaturepadded" 
} 

的2N的var_dump結果:

array(6) { 
    [0]=> string(8) "(m, m,m)" 
    [1]=> string(8) "(h, h,h)" 
    [2]=> string(8) "(m, m,m)" 
    [3]=> string(8) "(m, m,m)" 
    [4]=> string(8) "(h, h,h)" 
    [5]=> string(8) "(s, s,s)" 
} 
Unknown column 'm' in 'field list' 

我不明白什麼錯誤。誰能幫我?

回答

1

您正在循環輸入數組的每個元素,然後嘗試訪問沒有空字符串的屬性。 (驚訝它甚至做任何事情)

嘗試for循環。

for($i = 0; $i < count($array); $i+=3) 
{ 
    $msql[] = '('.$array[$i].', '.$array[$i+1].','.$array[$i+2].')'; 
} 

或定義您的$數組以適合您的循環。

+0

你是正確的。但是,現在我正在採取以下異常:您的SQL語法出錯;檢查與您的MySQL服務器版本相對應的手冊,以找到在'://re.n.o.coat附近使用的正確語法。png,militarycoat)'在第1行 –

+0

您可以添加生成的整個查詢嗎? Mysql語法錯誤總是有些模糊。 –

0

你試圖訪問與$ row ['trend']等數組關聯數組(多維),而你沒有它,如你的第一個var_dump所示。你的第一個的var_dump應該是這樣的:

$array = array(0 => array("trend"=> "value", "image_url" => "value, "sku" => "value"), 1=> array(....) and so on. 
0

Unknown column 'm' in 'field list'由產生:

$insertData = "INSERT INTO Data_Info (trend, image_url,sku) VALUES ".implode(',', $msql); 

VALUES必須用括號封裝。數據也應該用引號括起來。現在是:

VALUES (m, m, m),(h, h, h) 

,它應該是:

VALUES (('m', 'm', 'm'),('h', 'h', 'h')) 
    ^       ^
     |_________encapsulated__________| 

否則該數據被視爲列(Unknown column 'm' in 'field list'


其次,你的陣列不包含鍵trend,image_urlsku,所以你從它們得到的值是該數組中每個字符串的第一個字母:

  • (m, m,m)是從"mytrend"
  • (h, h,h)是第一個字母從"http://re.n.o.coat.png"

所以創建數組是這樣的:

$array = array(0 => array("trend"  => "put", 
          "image_url" => "something", 
          "sku"  => "in here"), 
       1 => array("trend"  => "value1", 
          "image_url" => "value2", 
          "sku"  => "value3"), 
       /* etc.. */ 
       );