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

在对表进行插入和截断时,上述情况完美适用于将 $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);

成功更新表。

在编写我的 mysqlidbconn 类时,我在 OOP 方面丢失了什么?

感谢您的帮助,对于未根据论坛规则发布的任何代码,我深表歉意。

4

2 回答 2

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 回答
0

没有什么是面向对象的,问题也不是真正的问题,因为它仅仅是由测量误差引起的,就像这里有几十万个问题一样。

没有任何与 OOP 相关的东西可以干扰 SQL,从而使一些查询运行而另一些则不运行。然而,许多 PHP 用户在更新查询、更新已更新的数据或检查错误数据库的结果等方面存在困难。

于 2015-08-24T08:11:56.123 回答