我从以下网址检索下面提到的部分代码:insert multiple rows via a php array into 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'
我无法理解出了什么问题。任何人都可以帮助我吗?
答案 0 :(得分:1)
您正在循环输入数组的每个元素,然后尝试访问没有的字符串的属性。 (甚至做任何事都感到惊讶)
尝试for
循环。
for($i = 0; $i < count($array); $i+=3)
{
$msql[] = '('.$array[$i].', '.$array[$i+1].','.$array[$i+2].')';
}
或以不同方式定义您的$数组以适应您的循环。
答案 1 :(得分:0)
你正试图用$ row ['trend']等来访问数组的关联数组(多维)...而你没有它,如你的第一个var_dump所示。你的第一个var_dump应如下所示:
$array = array(0 => array("trend"=> "value", "image_url" => "value, "sku" => "value"), 1=> array( .... ) and so on.
答案 2 :(得分: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_url
和sku
,因此您从中获取的值是该数组中每个字符串的第一个字母:< / p>
(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.. */
);