2010-01-06 39 views
0

我從來沒有使用mysqli直到今天,似乎無法得到這個權利。我想要的是一個簡單的函數,它將接受一個mysql過程調用並讓它返回這些結果。幫助mysqli和多個查詢

當我開始使用這些過程時,我注意到使用mysql_query查詢數據庫的舊方法不會再給我預期的結果;一個程序會成功返回,另一個程序不會。在閱讀了手冊和其他幾個例子之後,我發現這種奇怪行爲的原因是因爲結果需要緩衝然後清除。我嘗試了幾種方法來做到這一點,但都沒有成功。

我到目前爲止的工作,如果我創建mysqli對象的另一個實例,並會得到我的結果,但是,我不認爲這是正確的,我應該實例化20個不同的對象來取回20個不同的查詢。

再次,我想在這裏,是有一個單一的功能,我可以提供一個過程,並返回結果。

$mysqli = new mysqli('host','user','password','test'); 
$rs = $mysqli->query('CALL titles()'); 
while($row = $rs->fetch_object()) 
{ 
    print_r($row); 
} 

$mysqli2 = new mysqli('host','user','password','test'); 
$rs2 = $mysqli2->query('CALL colours()'); 
while($row2 = $rs2->fetch_object()) 
{ 
    print_r($row2); 
} 
+0

你是如何去回合緩衝和釋放的結果?這篇文章在過去幫助過我:http://www.rvdavid.net/using-stored-procedures-mysqli-in-php-5/ – prodigitalson 2010-01-06 06:58:41

+0

嗨prodigitalson,我只是簡單地調用查詢函數,循環遍歷那麼結果會是mysql_free_result()。像魅力一樣工作。然而,這是一個完全不同的動物。幾乎很抱歉,我在這一個程序路線。沒有太多的文件。 – Jim 2010-01-06 07:01:52

+0

是的,您提供的鏈接也是我今天遇到的鏈接。他正在使用的查詢似乎是依賴於另一個,這不是我在這裏。我的查詢完全相互獨立。 – Jim 2010-01-06 07:04:03

回答

0

,你可以爲這個類:

db.php中//一個DB類。打電話給你執行查詢。

<?php  
    class MyConnection{ 
     var $db_host = 'Localhost'; 
     var $db_user = 'mYUserName'; 
     var $db_password = 'myPassword'; 
     var $db_name = 'mYDB'; 
     var $connection; 


     function Connect(){ 
      $this->connection = @mysqli_connect($this->db_host, $this->db_user, $this->db_password) 
      or 
      die("Error: ".mysqli_connect_error()); 
      mysqli_select_db($this->connection, $this->db_name); 
      mysqli_query($this->connection, "SET NAMES 'utf8'"); 
     } 

     function Disconnect(){ 
      mysqli_close($this->connection); 
     } 

     function ExecSQL($query){ 
      $result = mysqli_query($this->connection, $query) 
           or 
           die('Error: '.mysqli_error($this->connection)); 
      return $result; 
     } 

    } 

?> 

實現:

include "db.php"; 
$conn = new MyConnection; 
$conn->Connect(); 

$rs = $conn->ExecSQL('CALL titles()'); 
while($row = $rs->fetch_object()) 
{ 
    print_r($row); 
} 

$rs2 = $conn->ExecSQL('CALL colours()'); 
while($row2 = $rs2->fetch_object()) 
{ 
    print_r($row2); 
} 
$conn->Disconnect(); 
+0

junmats,感謝您的代碼..我試過這個,你的權利,它是讓我的結果,但是,結果真的很奇怪。我打電話來獲取所有顏色和一個完全獨立的電話來獲得一些標題。當我使用ExecSQL方法進行查詢時,我得到了兩個結果,我只調用顏色過程。爲什麼會這樣呢? – Jim 2010-01-06 07:11:48

+0

謝謝junmats!我知道了。你在第3行有一個分析錯誤。你忘了分號。我補充說,它的工作原理。再次感謝。 – Jim 2010-01-06 07:19:21

+0

junmats,我可以問..這個程序類與OO方式有什麼區別?使用兩者還是真的有什麼好處? – Jim 2010-01-06 07:22:24