我遇到了将子数组数组值插入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行的值计数不匹配
答案 0 :(得分:1)
如果我没弄错的话,每个$row
都是一个关联数组,键为fl_tr,fl_id_tr等。
在这种情况下,当您说$row[$i] = '\'' . $row[$i] . '\'';
时,由于$row[$i]
为空,因此您的报价绝对没有任何内容。此外,它为每一行创建了密钥$i
,并将其设置为''
,因此您最终会在数组中总共有八个值:四个带有关联键的原始值,以及带斜杠的新数字键。当然,这会导致列数不匹配。
使用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
包裹起来是个好主意构建您正在使用的数组时的值。