2012-11-02 89 views
0

好吧,我到處去尋找答案,但不是任何真正的答案,我想這一次將是一個不錯的問那裏的人:PHP OOP用的mysqli類

我的班成員函數使用庫MySQLi的 「mysqli_query」 成員函數:

class mysqlidbconn extends mysqli { 

     protected $conn; //Or private $conn; 
     function dbconnect(){ 
      $localHost = false; 
      $link = new mysqli("server","database username","password","databasename") 
       or ($die = true); 
      if ($link->connect_error){ 
       die("Database selection failed: " . $link->connect_error); 
      }else{ 
       $this->conn = $link; 
      } 

     } 

,問題中的成員函數用於執行插入/更新/刪除/截斷查詢:

// To Execute Sql Query with no return result 
    function xQuery($sql) { 
     $this->conn->query($sql) or die("MySQL Query Execute Error: " . 
      $this->invDBConn->errorno . "<br>" . $this->conn->error . "<br>" . $sql 
      . "<br>"); 
    } 

在做刀片的d截斷了一個表,上面的情況與$ conn初始化爲類型爲mysqlidbconn的PRIVATE或PROTECTED成員變量完全一樣,下面的代碼使用mysqlidbconn類來舉例說明,不會生成錯誤,但也不會發生更新MySQL表:

<?php 
     require('path to php file containing mysqlidbconn class'); 
     $msqli = new mysqlidbconn; 
     $msqli->dbconnect(); 

     //This works 
     $sqlinsert = "insert into foo (foo_id, foo_field1...) values ('foo_id value', 
      'foo_field1 value',...);  
     $msqli->xQuery($sqlinsert); 

     //As does this 
     $sqltruncate = "truncate foo"; 
     $msqli->xQuery($sqltruncate); 

     //But the below does not work, giving no error, result, etc. 
     $sqlupdate = "update foo set foo_field1='another foo_field1 value'"; 
     $msqli->xQuery($sqlupdate); 

然而,當類與$ conn變量寫爲PUBLIC,上述

$sqlupdate = "update foo set foo_field1='another foo_field1 value'"; 
    $msqli->xQuery($sqlupdate); 

成功更新表。

這是怎麼回事OOP明智地說,當我寫我的mysqlidbconn類時,我想念?

感謝您的幫助,並對任何未根據論壇規則發佈的代碼致歉。

+0

有幾件事:1.您需要將您的MySQLi對象分配給變量以便使用它。換句話說,'$ blah = new mysqli(/ * args * /);'2.什麼是'$ die = true;'應該這樣做? ''die'你自己製作的自定義變量與'死'腳本殺死語句不同。說實話,我從來沒有見過在擴展MySQLi方面的多少意見。這已經是一堂課。您的'xQuery()'方法與您實際委派的現有'query()'方法沒有多大區別。 –

+0

在你的1) - 固定的,在我的帖子中,我根本沒有提到$ link的初始化爲新的mysqli(...)。在你的2)$ die中,在下面的if-else語句中處理。我知道$ die!= die()。 3)是的,你是正確的,但我想在我自己的類中使用mysqli作爲成員變量,因爲還有其他幾個與mysqli相關的函數,我使用它們並不適用於所有版本的mysql,即加載xml文件是對於 user1793027

+0

SQJ注射很多?您應該實際使用參數化查詢。如果你這樣做,不理我的評論。 – sinni800

回答

0

嘗試:

$link = new mysqli("server","database username","password","databasename") or 
      ($die = true); 


// To Execute Sql Query with no return result 
    function xQuery($sql) { 
     $result = $this->conn->query($sql); 
     if(!empty($result)) 
     { 
      return $result->fetch_assoc(); 
     } else { 
      return $this->conn->errno; 
     } 
    } 
+0

是的,我實際上已經在我的原始代碼中,所以沒有在這裏回答 - 編輯相應。這實際上會引發一個錯誤,腳本將永遠不會運行。我很抱歉。 – user1793027

+0

我不知道你的意思,我想通過英語翻譯來看你,我正在努力學習英語 –

+0

沒問題,羅 - 你做得很好,並指出我錯過的東西。 – user1793027

0

沒有什麼OOP明智和問題不是一個真實的,因爲它是由一個單純的測量誤差引起的,像許多成千上萬的問題在這裏。

沒有OOP相關的東西可以干擾SQL,使一些查詢運行,有些不是。許多PHP用戶在更新查詢,更新已更新的數據或檢查錯誤的數據庫結果等方面存在困難。