簡體   English   中英

Joomla 3通過多維數組循環進行數據庫插入

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM