2012-11-22 22 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.. */ 
       );