0

わかりました、私はどこでも答えを探しましたが、本当の答えの代わりに、これはそこにいる誰にとってもまともな質問になると思いました:

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>");
    }

テーブルで挿入と切り捨てを行う場合、上記の状況は、mysqlidbconn クラスを使用した以下のコードの例のように、クラス mysqlidbconn の PRIVATE または PROTECTED メンバー変数として初期化された $conn で完全に機能し、エラーは生成されませんが、更新もされません。 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);

テーブルを正常に更新します。

私のmysqlidbconnクラスを書くときに私が見逃しているOOPに関して、ここで何が起こっているのですか?

フォーラムのルールに従って投稿されていないコードについてお詫び申し上げます。

4

2 に答える 2

0

ここにある数十万の質問のように、単なる測定誤差によって引き起こされるため、OOP に関するものは何もなく、質問は実際のものではありません。

OOP 関連のものは SQL に干渉できず、一部のクエリが実行され、一部は実行されません。それでも、多くの PHP ユーザーは、更新クエリ、既に更新されたデータの更新、間違ったデータベースでの結果の確認などに問題を抱えています。

于 2015-08-24T08:11:56.123 に答える
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;
         }
     }
于 2012-11-02T01:50:16.480 に答える