首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列计数与第1行的值计数不匹配- PHP子数组

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

Stack Overflow用户
提问于 2012-03-07 03:53:10
回答 1查看 482关注 0票数 0

我遇到了将子数组数组值插入mysql表中的问题。我得到以下错误。

列计数与第1行的值计数不匹配。

不知道我做错了什么。

这是我的桌子

代码语言:javascript
复制
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;

这是一个数组样本。

代码语言:javascript
复制
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
        )
)

这是我用来插入的代码。

代码语言:javascript
复制
<?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行的值计数不匹配

EN

回答 1

Stack Overflow用户

发布于 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循环):

代码语言:javascript
复制
foreach($row as $key => $value) {
    $row[$key] = "'$value'";
}

希望这对你有用。

编辑:正如@DCoder所指出的(参见下面的注释),如果您在构建正在使用的数组时还没有转义值,那么将mysql_real_escape_string包装在$value中是个好主意。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9595583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档