2

関連コード:

$sql = "INSERT INTO rel_attivita_corsi(id_attivita,id_corso) VALUES";
foreach($elements as $element) {
    $sql .= "('".$element."','1'),";
}
$sql = substr($sql,0,-1);

if (!$this->db->query($sql)) {
    echo "FALSE";
}
else {
    echo "TRUE";
}
echo $this->db->last_query();

テーブル構造:

rel_attivita_corsi
-----------------------------
ID            (int)   primary
id_attivita   (int)
id_corso      (int)

ご覧のとおり、最後の raw は正しいクエリを返しますが、db のテーブルは空のままです... phpmyadmin で返されたクエリを実行すると、すべてが正しく機能します。

何か案は?

更新 1 - アクティブ レコードの使用:

$dati = array();

foreach($elements as $element){
    $dati[] = array('id_attivita' => $element, 'id_corso' => 1);
}

if (!$this->db->insert_batch("rel_attivita_corsi",$dati)) {
    echo "FALSE";
}
else {
    echo "TRUE";
}

echo $this->db->last_query();

成功せず、最後のクエリは正しく印刷されましたが、挿入は行われません

更新 2 - アクティブなレコードを使用し、foreach を使用しない:

$this->db->insert_batch("rel_attivita_corsi",array(array('id_attivita' => 7,'id_corso' => 1),array('id_attivita' => 9,'id_corso' => 1)));

失敗....

偽の値を実際の値に置き換えました。$elements配列は次のとおりです。

Array
(
    [0] => 7
    [1] => 9
)

UPDATE 3 問題は解決しました...テーブルに挿入されたすべてのレコードを削除するコードの後に​​別のクエリがあったため、テーブルは常に空でした

コードの流れに疑問がある場合は、プロファイリングを使用してみてください

4

2 に答える 2