是否有一种智能方法可以通过PHP运行多个MySQL查询,这些查询由字符串中的分号(;)分隔,可能还有PHP函数 - 这样的PHP函数怎么能被编码?查询必须用字符串中的冒号分隔,并且不应该在其他问题中手动编辑它,因为解决方案应该处理这种格式(这就是要点)。
$multi_query = "INSERT INTO `stuff_5_firm` (firm_id, firmname) VALUES (0, 'Hey LTD');
INSERT INTO `stuff_6_invoice` (invoice_id, firm_id, amount) VALUES (0, 0, 500);
INSERT INTO `stuff_7_order` (order_id, firm_id, when) VALUES (0, 0, '2018-05-05'); ";
答案 0 :(得分:1)
这是一个有效的解决方案
<?php
function function_that_does_multiple_queries($mq, $dblink) {
// if a new line follows the ; then $q_array = explode(';\n',$mq); is suggested since queries can contain ; below
$q_array = explode(";",$mq);
/*
//To check structure of array
echo "<pre>";
print_r($q_array);
echo "</pre>";
exit();
*/
foreach($q_array as $q){
$q = trim($q);
$r[] = mysqli_query($dblink,$q);
}
return $r;
}
$multi_query = "CREATE TABLE IF NOT EXISTS `stuff_5_firm` (
`firmid` int(11) NOT NULL,
`firm_name` varchar(256) NOT NULL,
`firm_invoice_adr` text NOT NULL,
`firm_invoice_email` varchar(256) NOT NULL,
`firm_admin_con_to_userid` int(16) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `stuff_6_invoice` (
`invoiceid` int(11) NOT NULL,
`inv_date` datetime NOT NULL,
`inv_due` datetime NOT NULL,
`inv_paid` datetime NOT NULL,
`inv_amount` int(11) NOT NULL,
`inv_text` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;";
function_that_does_multiple_queries($multi_query, $dblink);
?>
使用mysqli_multi_query可能更明智,这里解释http://php.net/manual/en/mysqli.multi-query.php(感谢@andrewsi)。