$sql = "
DELETE FROM `products` WHERE id = 123456;
INSERT INTO `products` SET `name` = 'abc', `price` = 100;
DELETE FROM `survey` WHERE id = 2522;
INSERT INTO `survey` SET `survey_name` = 'bla bla', `date` = 10-07-2018;
";
当我从 phpmyadmin 运行它时,它就可以工作了。但是,当我从 Codeigniter以$this->db->query($sql);
的身份运行它时...那时候它不起作用了。
我该如何解决?
注意:在 $ sql 变量中有大量查询。我想一次查询大量的服务器。然后服务器一一执行这些查询。我从不想再打PHP了。
答案 0 :(得分:1)
也许使用交易?
$this->db->trans_start();
$this->db->query('DELETE FROM `products` WHERE id = 123456');
$this->db->query('INSERT INTO `products` SET `name` = 'abc', `price` = 100');
$this->db->query('DELETE FROM `survey` WHERE id = 2522');
$this->db->query('INSERT INTO `survey` SET `survey_name` = 'bla bla', `date` = 10-07-2018');
$this->db->trans_complete();
答案 1 :(得分:1)
根据CodeIgniter Docs,如果要运行多个查询,则应进行事务处理。但是这个解决方案已经得到解决,我不再写了。
但是我想展示一下,您仍然可以将查询写在一个变量中,并使用for循环来一一拆分和执行:
$sqls = explode(';', $sql);
array_pop($sqls);
foreach($sqls as $statement){
$statment = $statement . ";";
$this->db->query($statement);
}
This code piece属于github用户Relequestual,我在其要旨上使用了他的示例代码,为您提供了另一种方法。
编辑:如果您想一次将多个查询传递给数据库,则应使用事务,事务将在此之后处理并为您执行。所以代码应该是这样的:
$sqls = explode(';', $sql);
array_pop($sqls);
$this->db->trans_start();
foreach($sqls as $statement){
$statment = $statement . ";";
$this->db->query($statement);
}
$this->db->trans_complete();
答案 2 :(得分:0)
您可以使用Union
来加入查询:
这在Codeinginter中对我有用:
$result = $this->db->query($query1 .' UNION '. $query2)->result_array();
答案 3 :(得分:-1)
将交易用作波纹管
$this->db->trans_start();
$this->db->query("DELETE FROM products WHERE id = 123456");
$this->db->query("INSERT INTO products SET name = 'abc', price = 100;");
$this->db->query("DELETE FROM survey WHERE id = 2522");
$this->db->query("INSERT INTO survey SET survey_name = 'bla bla', date = '10-07-2018'");
$this->db->trans_complete();