Php 是否有一种聪明的方法可以在mysql中运行多个由分号分隔的查询;

Php 是否有一种聪明的方法可以在mysql中运行多个由分号分隔的查询;,php,mysql,Php,Mysql,有没有一种聪明的方法可以通过PHP运行多个MySQL查询,这些查询由一个字符串中的分号(;)分隔,可能是通过一个PHP函数实现的?如何对这样的PHP函数进行编码?查询必须用字符串中的冒号分隔,并且不应该像其他问题中所接受的那样进行手动编辑,因为解决方案应该处理这种格式(这就是重点) 这里有一个有效的解决方案 <?php function function_that_does_multiple_queries($mq, $dblink) { // if a new line foll

有没有一种聪明的方法可以通过PHP运行多个MySQL查询,这些查询由一个字符串中的分号(;)分隔,可能是通过一个PHP函数实现的?如何对这样的PHP函数进行编码?查询必须用字符串中的冒号分隔,并且不应该像其他问题中所接受的那样进行手动编辑,因为解决方案应该处理这种格式(这就是重点)


这里有一个有效的解决方案

<?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\u multi\u查询可能更明智,这在这里有解释(感谢@andrewsi)。

这里有mysqli的multi\u查询:
<?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);

?>