如何在Codeigniter中同时运行多个查询


$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中多次命中。

可能使用事务?

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

相关问题:https://stackoverflow.com/a/17358652/5566169

根据CodeIgniter文档,如果您想运行多个查询,则应该进行交易。但这个解决方案已经得到了答案,我不会再写了。

但我想展示的是,您仍然可以在一个变量中编写查询,并使用for循环逐个拆分和执行:

$sqls = explode(';', $sql);
array_pop($sqls);
foreach($sqls as $statement){
$statment = $statement . ";";
$this->db->query($statement);   
}

这段代码属于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(); 

使用以下交易-

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

您可以使用Union加入查询:

这适用于我在编码编辑器:

$result = $this->db->query($query1 .' UNION '. $query2)->result_array();

相关内容

  • 没有找到相关文章

最新更新