mysql -- 一次執行多條sql語句

來源:互聯網
上載者:User

標籤:

最近要做一個軟體升級,其中涉及到資料庫表欄位的變動(新增或刪除或修改),所有的關於資料庫的變動的sql語句都是存放在Sqlupdate.sql檔案中,每次升級的時候都需要執行一次Sqlupdate.sql裡的所有sql語句,這就涉及到執行多條語句的問題了。軟體在CodeIgniter架構上開發的,CodeIgniter有封裝好的執行sql語句的函數:$this->db->query(‘****‘),但此函數一次只能執行一條sql語句。所以得另外想辦法了。百度了下,找到了一些資料。multi_query()方法是完全按照在sql環境下的語句執行,所以可以一次執行多條sql語句(按sql文法拼字,每條語句以;結束)。

 $mysqli = new mysqli($this->db->hostname,$this->db->username,$this->db->password,$this->db->database);   //串連MySQL資料庫 if ($mysqli->connect_errno) { //判斷是否串連成功       printf("Connect failed: %s\n", $mysqli->connect_error);       exit();  }  $mysqli->multi_query($dataStr); //執行sql語句

 

以下是百度到的參考資料:

使用mysqli對象中的query()方法每次調用只能執行一條SQL命令。如果需要一次執行多條SQL命令,就必須使用mysqli對象中的 multi_query()方法。具體做法是把多條SQL命令寫在同一個字串裡作為參數傳遞給multi_query()方法,多條SQL之間使用分號 (;)分隔。如果第一條SQL命令在執行時沒有出錯,這個方法就會返回TRUE,否則將返回FALSE。

因為multi_query()方法能夠串連執行一個或多個查詢,而每條SQL命令都可能返回一個結果,在必要時需要擷取每一個結果集。所以對該方 法返回結果的處理也有了一些變化,第一條查詢命令的結果要用mysqli對象中的use_result()或store_result()方法來讀取,當 然,使用store_result()方法將全部結果立刻取回到用戶端,這種做法效率更高。另外,可以用mysqli對象中的 more_results()方法檢查是否還有其他結果集。如果想對下一個結果集進行處理,應該調用mysqli對象中的next_result()方 法,擷取下一個結果集。這個方法返回TRUE(有下一個結果)或FALSE。如果有下一個結果集,也需要使用use_result()或 store_result()方法來讀取。執行多條SQL命令代碼如下所示:

<?php    $mysqli = new mysqli("localhost", "mysql_user","mysql_pwd", "demo");   //串連MySQL資料庫    if (mysqli_connect_errno()) {                              //檢查串連錯誤         printf("串連失敗: %s<br>", mysqli_connect_error());        exit();     }     /* 將三條SQL命令使用分號(;)分隔, 串連成一個字串 */         //設定查詢字元集為GB2312    $query = "SET NAMES GB2312;";     //從MySQL伺服器擷取目前使用者    $query .= "SELECT CURRENT_USER();";      //從contactinfo表中讀取資料    $query .= "SELECT name,phone FROM contactinfo LIMIT 0,2";     //執行多條SQL命令    if ($mysqli->multi_query($query)) {                              do {            //擷取第一個結果集             if ($result = $mysqli->store_result()) {                            //遍曆結果集中每條記錄                  while ($row = $result->fetch_row()) {                           //從一行記錄數組中擷取每列資料                      foreach($row as $data){                             //輸出每列資料                        echo $data."&nbsp;&nbsp;";                           }                    //輸出分行符號號                    echo "<br>";                      }                    //關閉一個開啟的結果集                    $result->close();                             }            //判斷是否還有更多的結果集          if ($mysqli->more_results()) {                          //輸出一行分隔線             echo "-----------------<br>";                      }        } while ($mysqli->next_result());     //擷取下一個結果集,並繼續執行迴圈               }    $mysqli->close();      //關閉mysqli串連?>        

 

輸出結果如下所示:

  1. [email protected]
  2. -----------------
  3. 高某某   15801688338
  4. 洛某某   15801681234

在上面的樣本程式中,使用mysqli對象中的multi_query()方法一次執行三條SQL命令,擷取多個結果集並從中遍曆資料。如果在命令 的處理過程中發生了錯誤,multi_query()和next_result()方法就會出現問題。multi_query()方法的傳回值,以及 mysqli的屬性errno、error、info等只與第一條SQL命令有關,無法判斷第二條及以後的命令是否在執行時發生了錯誤。所以在執行 multi_query()方法的傳回值是TRUE時,並不意味著後續命令在執行時沒有出錯。

mysql -- 一次執行多條sql語句

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.