列数与第1行的值计数不匹配 - PHP子数组

时间:2012-03-07 03:53:10

标签: php arrays

我遇到了将子数组数组值插入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行的值计数不匹配

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包裹起来是个好主意构建您正在使用的数组时的值。