2013-05-16 17 views
3

是否有一種聰明的方式來運行多個MySQL查詢,在字符串中用分號(;)分隔,可能使用PHP函數 - 以及如何編寫這樣的PHP函數?查詢必須用一個字符串中的冒號分隔,並且不應該在其他問題中接受手動編輯,因爲解決方案應該處理這種格式(就是這一點)。是否有一種巧妙的方式在mysql中運行多個查詢,用分號分隔;

$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'); "; 
+5

還有mysqli的multi_query:http://php.net/manual/en/mysqli.multi-query.php – andrewsi

回答

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)。

相關問題