codeigniter INSERT查询正确并执行但不执行插入

时间:2013-05-20 10:07:37

标签: 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 "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();

没有成功,上次查询打印正确但没有插入

更新2 - 使用有效记录而不使用foreach:

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

没有成功......

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

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

更新3 问题解决了......在代码中删除了每个记录插入到表中之后还有另一个查询,因此表总是空的

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

2 个答案:

答案 0 :(得分:6)

我认为你错了:

$sql .= "('".$element."','1'),";

这会产生(value,1), (value, 1) , (value, 1)

当你需要时

(value,value,value)
ma p p po po po po po po po P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P

所以您的查询是:

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();

IN CASE您正在尝试进行INSERT BATCH检查它所说的Codeigniter文档:

 $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')

答案 1 :(得分:0)

替换代码:

$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'),";
}