我遇到了将子数组数组值插入mysql表中的问题。我得到以下错误。
列计数与第1行的值计数不匹配。
不知道我做错了什么。
这是我的桌子
CREATE TABLE IF NOT EXISTS `tbl_tourn_results` (
`fld_tr` char(10) NOT NULL,
`fld_id_tr` char(5) NOT NULL,
`fld_score` smallint(6) DEFAULT NULL,
`fld_hole` smallint(6) DEFAULT NULL,
`fld_T_Time` varchar(10) DEFAULT NULL,
PRIMARY KEY (`fld_tourn_id_tr`,`fld_gPlayer_id_tr`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;这是一个数组样本。
Array
(
[0] => Array
(
[fld_tr] => HONDA
[fld_id_tr] => RoMcI
[fld_score] => -12
[fldr_hole] => F
)
[1] => Array
(
[fld_tr] => HONDA
[fld_id_tr] => TiWoo
[fld_score] => -10
[fld_hole] => F
)
[2] => Array
(
[fld_tr] => HONDA
[fld_id_tr] => TiWoo
[fld_score] => -10
[fld_hole] => F
)
[3] => Array
(
[fld_tr] => HONDA
[fld_id_tr] => TiWoo
[fld_score] => -10
[fld_hole] => F
)
)这是我用来插入的代码。
<?php
//Each 'sub-array' will become a row in the table
foreach($result as $row){
$i = 0;
//3 (not 4!) is the highest key in each sub-array
while($i <= 3){
//MySQL likes each value wrapped in apostrophes
$row[$i] = '\'' . $row[$i] . '\'';
$i++;
}
//Convert the sub-array into a comma-separated string
$row = implode(",", $row);
//MySQL query inserts the sub-array into a new row in the table
mysql_query("INSERT INTO tbl_results (fld_tr, fld_id_tr, fld_score, fld_hole) VALUES({$row}) ") or die(mysql_error());
}
?>我得到以下错误。列计数与第1行的值计数不匹配
发布于 2012-03-07 05:20:53
如果我没有弄错的话,每个$row都是一个关联数组,键是fl_tr、fl_id_tr等等。
在这种情况下,当你说$row[$i] = '\'' . $row[$i] . '\'';的时候,你绝对不会用引号包围任何东西,因为$row[$i]是空的。此外,它还为每一行创建了键$i,并将其设置为'',因此您将在数组中得到8个总计值:四个原始值带有关联键,新的数字键带有斜杠。当然,这会导致列数不匹配。
在PHP中使用foreach循环可以做的有趣的事情是foreach($row as $key => $value) {,其中$key和$value成为数组中每个元素的关键和值。它也适用于数字数组。
因此,可以用以下方法替换整个while循环(而不是现有的foreach循环):
foreach($row as $key => $value) {
$row[$key] = "'$value'";
}希望这对你有用。
编辑:正如@DCoder所指出的(参见下面的注释),如果您在构建正在使用的数组时还没有转义值,那么将mysql_real_escape_string包装在$value中是个好主意。
https://stackoverflow.com/questions/9595583
复制相似问题