[英]Joomla 3 loop through multidimensional array for db insert
這是我在這里的第一個問題,所以請很好:)
我正在嘗試插入多條記錄,但我不斷收到mysql錯誤,#1136列數與第1行的值計數不匹配。我在這里按照指南進行操作: http : //docs.joomla.org/Inserting ,_Updating_and_Removing_data_using_JDatabase
我的問題的一部分是列在數組中不一定總是相同的。 例如,“ address1”是必需的,但“ address2”和“ address3”不是必需的。 盡管所有可用字段都存在於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());
}
}
您的錯誤消息本身將說明問題。
列字段和值字段的編號不匹配。
您已經提到address1
是必需的,而address2,3
不是必需的,因此在您的查詢中,該列每次都具有3個字段,但是當2 and 3
空時,value僅具有address1
。 因此,請確保所有時間都具有這三個字段,即使這些字段具有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());
}
希望有道理..
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.