Joomla 3循环通过多维数组进行数据库插入

时间:2014-07-09 20:10:32

标签: php joomla

这是我在这里的第一个问题,所以请保持友善:)

我试图插入多条记录,但我一直收到mysql错误,#1136列数与第1行的值计数不匹配。我已按照指南进行操作:{{ 3}}

我的部分问题是数据中的列不一定总是相同的。例如,'地址1'是必需的,但'地址2'和'地址3'不是。但是,所有可用字段都存在于db表中,因此我只需要将列指定为每个值集的键。

我觉得我错过了一些非常明显的东西,但是花了太多时间,我希望有人能够轻松指出它。

这是我的错误:
1136列数与第1行的值计数不匹配SQL = INSERT INTO jos_supersite_contact

以下是我使用的代码....

        foreach ($data[0]['result'] as $results) {
            $db = JFactory::getDbo();
            $db->getQuery(true);
            foreach ($results as $key => $value) {
                $columns[] = $db->quoteName(str_replace('.', '_', $key));
                $rows[] = $db->quote($value);
            }
            $query
                    ->columns($columns)
                    ->values(implode(',',$rows))
                    ->insert($db->quoteName('#__supersite_contact'));
            $db->setQuery($query);
            if (!$db->execute()) {
                throw new Exception($db->getErrorMsg());
            }
        }

1 个答案:

答案 0 :(得分:0)

您的错误消息本身解释了这个问题。

列字段和值字段的编号不匹配。

您已经提到address1是必需的而address2,3并非如此,在您的查询中,该列每次​​都有3个字段,但当address1为空时,值只有2 and 3。因此,请确保所有时间都有这三个字段,即使那些字段具有null

此外,我注意到您在循环内使用的查询为数据库提供了更多负载。而不是使用像下面那样使用。

       $db = JFactory::getDbo();
       $columns = "column1,column2,column3";
       //This is what you need to loop.
       $vals    = "('$db->quote($val1)','$db->quote($val2)','$db->quote($val3)')
                  ,('$db->quote($val1)','$db->quote($val2)','$db->quote($val3)')
                  ,('$db->quote($val1)','$db->quote($val2)','$db->quote($val3)')"; 
       $query
               ->columns($columns)
               ->values($vals)
               ->insert($db->quoteName('#__supersite_contact'));
        $db->setQuery($query);
        if (!$db->execute()) {
            throw new Exception($db->getErrorMsg());
        }
多行插入情况下的

This is much effective

希望它有意义......