Mysql codeigniter插入查询正确并已执行,但未执行插入

Mysql codeigniter插入查询正确并已执行,但未执行插入,mysql,codeigniter,insert,Mysql,Codeigniter,Insert,相关代码: $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 "T

相关代码:

$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)
正如您所见,我使用的是codeigniter,最后一个原始数据返回正确的查询,但数据库中的表仍然为空。。。运行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();
$this->db->insert_batch("rel_attivita_corsi",array(array('id_attivita' => 7,'id_corso' => 1),array('id_attivita' => 9,'id_corso' => 1)));
 $data = array(
   array(
      'title' => 'My title' ,
      'name' => 'My Name' ,
      'date' => 'My date'
   ),
   array(
      'title' => 'Another title' ,
      'name' => 'Another Name' ,
      'date' => 'Another date'
   )
);

$this->db->insert_batch('mytable', $data);

// Produces: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date'), ('Another title', 'Another name', 'Another date')
未成功,上次查询打印正确,但未插入

更新2-使用活动记录而不使用foreach:

$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();
$this->db->insert_batch("rel_attivita_corsi",array(array('id_attivita' => 7,'id_corso' => 1),array('id_attivita' => 9,'id_corso' => 1)));
 $data = array(
   array(
      'title' => 'My title' ,
      'name' => 'My Name' ,
      'date' => 'My date'
   ),
   array(
      'title' => 'Another title' ,
      'name' => 'Another Name' ,
      'date' => 'Another date'
   )
);

$this->db->insert_batch('mytable', $data);

// Produces: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date'), ('Another title', 'Another name', 'Another date')
没有成功

我现在用真值替换假值,
$elements
数组是:

Array
(
    [0] => 7
    [1] => 9
)
更新3 问题解决了。。。代码之后还有一个查询删除了表中插入的每条记录,因此表总是空的


如果您对代码的流程有疑问,请尝试使用

我认为您的循环错误:

$sql .= "('".$element."','1'),";
这将产生
(值,1),(值,1),(值,1)

当你需要的时候

(value,value,value)
我要买一张票

所以你的问题是:

INSERT INTO table(ID,id_activity,id_cont) VALUES (somenthin,1), (somenthing,1) etc ..
而你需要的是

INSERT INTO table(ID,id_activity,id_cont) VALUES (value,value,value) ;
您可以尝试以下方法:

$sql = "INSERT INTO table(id_activity,id_cont) VALUES (".implode(',',$elements)."); ";

if (!$this->db->query($sql)) {
    echo "FALSE";
}
else {
    echo "TRUE";
}
echo $this->db->last_query();
如果您正在尝试批量插入,请检查Codeigniter文档,它会显示:

$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();
$this->db->insert_batch("rel_attivita_corsi",array(array('id_attivita' => 7,'id_corso' => 1),array('id_attivita' => 9,'id_corso' => 1)));
 $data = array(
   array(
      'title' => 'My title' ,
      'name' => 'My Name' ,
      'date' => 'My date'
   ),
   array(
      'title' => 'Another title' ,
      'name' => 'Another Name' ,
      'date' => 'Another date'
   )
);

$this->db->insert_batch('mytable', $data);

// Produces: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date'), ('Another title', 'Another name', 'Another date')
替换代码:

$sql = "INSERT INTO table(id_activity,id_cont) VALUES";
foreach($elements as $element) {
    $sql .= "('".$element."','1'),";
}
使用代码:

$sql = "INSERT INTO table(ID,id_activity,id_cont) VALUES";
foreach($elements as $element) {
    $sql .= " ('','".$element."','1'),";
}

您能否显示
$sql
包含的内容?附带问题:您是否在某个时候转义/清理
$elements
?为什么不使用codeigniters活动记录类来构建sql语句?它看起来更干净,并且在插入值之前对其进行清理(您目前没有这样做)。你能用
print\r($element)更新你的问题吗,这样我们就可以告诉你是否做对了!!!