这是我在这里的第一个问题,所以请保持友善:)
我试图插入多条记录,但我一直收到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());
}
}
答案 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());
}
多行插入情况下的
希望它有意义......