使用PHP OOP概念连接到MySQL数据库

时间:2011-12-12 13:12:56

标签: php oop function mysqli

我正在编写一个类和一些函数来连接数据库并从表中检索信息。我浏览过以前有类似标题的帖子,但大多数都是使用mysql函数编写的,我使用的是mysqli函数。

我希望有人可以通过这个简单的脚本让我知道我在哪里弄错了。

这是我的class.connect.php

<?php

    class mySQL{
        var $host;
        var $username;
        var $password;
        var $database;
        public $dbc;

        public function connect($set_host, $set_username, $set_password, $set_database)
        {
            $this->host = $set_host;
            $this->username = $set_username;
            $this->password = $set_password;
            $this->database = $set_database;

            $this->dbc = mysqli_connect($this->host, $this->username, $this->password,           $this->database) or die('Error connecting to DB');        
        }

        public function query($sql)
        {
            return mysqli_query($this->dbc, $sql) or die('Error querying the Database');
        }

        public function fetch($sql)
        {        
            $array = mysqli_fetch_array($this->query($sql));          
            return $array;
        }

        public function close()
        {
            return mysqli_close($this->dbc);
        }
    }
    ?>

这是我的index.php

<?php
        require_once ("class.connect.php");

        $connection = new mySQL();

        $connection->connect('localhost', 'myDB', 'joker', 'names_list');
        $myquery = "SELECT * FROM list";
        $query = $connection->query($myquery);        

        while($array = $connection->fetch($query))
        {
            echo $array['first_name'] . '<br />';
            echo $array['last_name'] . '<br />';                
        }

        $connection->close();
?>

我收到的错误是Error querying the Database

7 个答案:

答案 0 :(得分:2)

几个问题: -

  1. 如果没有提供proper mysql error你就不会死(并且优雅地退出是好的做法)

  2. fetch method只是FETCH的第一行

  3. mysqli有OO方法,为什么你仍然使用程序功能?

答案 1 :(得分:2)

问题是:

    public function fetch($sql)
    {        
        $array = mysqli_fetch_array($this->query($sql));          
        return $array;
    }

或者这个:

 while($array = $connection->fetch($query))

因为您正在使用查询中的结果再次进行查询。基本上,你在做:

$r = mysqli_query($this->dbc, $sql);
$array = mysqli_fetch_array(mysqli_query($this->dbc, $r));

您收到错误,因为$ r不是查询字符串。当它被转换为字符串时,它是一个“1”(来自你的其他评论)。

尝试将函数更改为(更改变量名称,以便您可以看到差异):

    public function fetch($result)
    {        
        return mysqli_fetch_array($result);
    }

或直接调用该函数。

答案 2 :(得分:2)

如果你没有自己的db抽象来学习php和mysql,你可以使用Medoo(http://medoo.in/)。

这是一个免费的小型数据库框架,可以节省大量的工作和时间。

答案 3 :(得分:1)

SELECT * FROM list显然发生了错误,您可以使用mysqli_error查找错误:

return mysqli_query($this->dbc, $sql) or die('Error:'.mysqli_error($this->dbc));

这将显示确切的错误消息,并将帮助您解决问题。

答案 4 :(得分:1)

尝试检查

https://pramodjn2.wordpress.com/

$database = new db();

$query = $database->select(‘user’);

$st = $database->result($query);

print_r($st);

  class db {
                public $server = ‘localhost';
                public $user = ‘root';
                public $passwd = ‘*****';
                public $db_name = ‘DATABASE NAME';
                public $dbCon;

        public function __construct(){
                $this->dbCon = mysqli_connect($this->server, $this->user, $this->passwd, $this->db_name);
        }

        public function __destruct(){
                mysqli_close($this->dbCon);
        }

    /* insert function table name, array value
       $values = array(‘first_name’ => ‘pramod’,’last_name’=> ‘jain’);
    */            
       public function insert($table,$values)
       {
            $sql = “INSERT INTO $table SET “;
               $c=0;
            if(!empty($values)){
                foreach($values as $key=>$val){
                    if($c==0){
                        $sql .= “$key='”.htmlentities($val, ENT_QUOTES).”‘”;
                    }else{
                        $sql .= “, $key='”.htmlentities($val, ENT_QUOTES).”‘”;
                    }
                    $c++;
                }
            }else{
              return false;
            }
            $this->dbCon->query($sql) or die(mysqli_error());
            return mysqli_insert_id($this->dbCon);
     }

     /* update function table name, array value
        $values = array(‘first_name’ => ‘pramod’,’last_name’=> ‘jain’);
        $condition = array(‘id’ =>5,’first_name’ => ‘pramod!’);
     */        
     public function update($table,$values,$condition)
     {
        $sql=”update $table SET “;
        $c=0;
        if(!empty($values)){
            foreach($values as $key=>$val){
                if($c==0){
                    $sql .= “$key='”.htmlentities($val, ENT_QUOTES).”‘”;
                }else{
                    $sql .= “, $key='”.htmlentities($val, ENT_QUOTES).”‘”;
                }
                $c++;
            }
        }
        $k=0;    
        if(!empty($condition)){
            foreach($condition as $key=>$val){
                if($k==0){
                    $sql .= ” WHERE $key='”.htmlentities($val, ENT_QUOTES).”‘”;
                }else{
                    $sql .= ” AND $key='”.htmlentities($val, ENT_QUOTES).”‘”;
                }
                $k++;
            }
        }else{
          return false;
        }
        $result = $this->dbCon->query($sql) or die(mysqli_error());
        return $result;
     }

     /* delete function table name, array value
        $where = array(‘id’ =>5,’first_name’ => ‘pramod’);
     */    
    public function delete($table,$where)
    {
        $sql = “DELETE FROM $table “;
        $k=0;    
        if(!empty($where)){
            foreach($where as $key=>$val){
                if($k==0){
                    $sql .= ” where $key='”.htmlentities($val, ENT_QUOTES).”‘”;
                }else{
                    $sql .= ” AND $key='”.htmlentities($val, ENT_QUOTES).”‘”;
                }
                $k++;
            }
        }else{
            return false;
        }
           $del = $result = $this->dbCon->query($sql) or die(mysqli_error());
            if($del){
               return true;
            }else{
               return false;
            }
        }


    /* select function
       $rows = array(‘id’,’first_name’,’last_name’);
       $where = array(‘id’ =>5,’first_name’ => ‘pramod!’);
       $order = array(‘id’ => ‘DESC’);
       $limit = array(20,10);
    */
    public function select($table, $rows = ‘*’, $where = null, $order = null, $limit = null)
    {
       if($rows != ‘*’){
         $rows = implode(“,”,$rows);
       }

        $sql = ‘SELECT ‘.$rows.’ FROM ‘.$table;
        if($where != null){
            $k=0;
            foreach($where as $key=>$val){
                if($k==0){
                    $sql .= ” where $key='”.htmlentities($val, ENT_QUOTES).”‘”;
                }else{
                    $sql .= ” AND $key='”.htmlentities($val, ENT_QUOTES).”‘”;
                }
                $k++;
            }    
        }

        if($order != null){
            foreach($order as $key=>$val){
                    $sql .= ” ORDER BY $key “.htmlentities($val, ENT_QUOTES).””;
            }    
        }    

      if($limit != null){
             $limit = implode(“,”,$limit);
             $sql .= ” LIMIT $limit”;

        }
        $result = $this->dbCon->query($sql);
        return $result;

    }  

    public function query($sql){
    $result = $this->dbCon->query($sql);
    return $result;
    }

    public function result($result){
    $row = $result->fetch_array();
    $result->close();
    return $row;
    }

    public function row($result){
    $row = $result->fetch_row();
    $result->close();
    return $row;
    }

    public function numrow($result){
    $row = $result->num_rows;
    $result->close();
    return $row;
    }

 }

答案 5 :(得分:1)

fetch方法中的mysqli_fetch_array函数需要两个参数,即SQL结果和要返回的数组类型。在我的情况下,我使用MYSQLI_ASSOC。

这应该是这样的:

公共函数提取($ sql)     {
        $ array = mysqli_fetch_array($ this-&gt; query($ sql),MYSQLI_ASSOC);
        return $ array;     }

答案 6 :(得分:-1)

**classmysql.inc.php**

    <?php
        class dbclass { 
            var $CONN;
            function dbclass() { //constructor
                $conn = mysql_connect(SERVER_NAME,USER_NAME,PASSWORD);  
                //$conn = mysql_connect(localhost,root,"","");
                if(!$conn) 
                    {   $this->error("Connection attempt failed");      }
        if(!mysql_select_db(DB_NAME,$conn)) 
                    {   $this->error("Database Selection failed");      }
                $this->CONN = $conn;
                return true;
            }
            //_____________close connection____________//
            function close(){
                $conn = $this->CONN ;
                $close = mysql_close($conn);
                if(!$close){
                  $this->error("Close Connection Failed");  }
                return true;
            }
            function error($text) {
                $no = mysql_errno();
                $msg = mysql_error();
                echo "<hr><font face=verdana size=2>";
                echo "<b>Custom Message :</b> $text<br><br>";
                echo "<b>Error Number :</b> $no<br><br>";
                echo "<b>Error Message  :</b> $msg<br><br>";
                echo "<hr></font>";
                exit;
            }
            //_____________select records___________________//
            function select ($sql=""){
                if(empty($sql)) { return false; }
                if(!eregi("^select",$sql)){ 
                  echo "Wrong Query<hr>$sql<p>";
                        return false;       }
                if(empty($this->CONN)) { return false; }
                $conn = $this->CONN;
                $results = @mysql_query($sql,$conn);            
                if((!$results) or empty($results))  {   return false;       }
                $count = 0;
                $data  = array();
                while ( $row = mysql_fetch_array($results)) {   
                    $data[$count] = $row;
                    $count++;       }
                mysql_free_result($results);
                return $data;
            }

            //________insert record__________________//
            function insert ($sql=""){
                if(empty($sql)) { return false; }
                if(!eregi("^insert",$sql)){ return false;       }
                if(empty($this->CONN)){ return false;       }
                $conn = $this->CONN;            
                $results = @mysql_query($sql,$conn);            
                if(!$results){
                    $this->error("Insert Operation Failed..<hr>$sql<hr>");
                    return false;       }
                $id = mysql_insert_id();
                return $id;
            }
            //___________edit and modify record___________________//
            function edit($sql="")  {
                if(empty($sql)) {   return false;       }
                if(!eregi("^update",$sql)){ return false;       }
                if(empty($this->CONN)){ return false;       }
                $conn = $this->CONN;
                $results = @mysql_query($sql,$conn);
                $rows = 0;
                $rows = @mysql_affected_rows();
                return $rows;
            }
            //____________generalize for all queries___________//
            function sql_query($sql="") {   

                if(empty($sql)) { return false; }
                if(empty($this->CONN)) { return false; }
                $conn = $this->CONN;
                $results = mysql_query($sql,$conn) or $this->error("Something wrong in query<hr>$sql<hr>");

                if(!$results){
                   $this->error("Query went bad ! <hr>$sql<hr>");
                        return false;       }       
                if(!eregi("^select",$sql)){return true;         }
                else {
                    $count = 0;
                    $data = array();
                    while ( $row = mysql_fetch_array($results))
                    {   $data[$count] = $row;
                        $count++;               }
                    mysql_free_result($results);
                    return $data;
                }
            }   

        function extraqueries($sql="")  {   

                if(empty($sql)) { return false; }
                if(empty($this->CONN)) { return false; }
                $conn = $this->CONN;
                $results = mysql_query($sql,$conn) or $this->error("Something wrong in query<hr>$sql<hr>");

                if(!$results){
                   $this->error("Query went bad ! <hr>$sql<hr>");
                        return false;       }       
                else {
                    $count = 0;
                    $data = array();
                    while ( $row = mysql_fetch_array($results))
                    {   $data[$count] = $row;
                        $count++;               }
                    mysql_free_result($results);
                    return $data;
                }
            }   

        } 

    ?>

**config.inc.php**
    <?php
    ini_set("memory_limit","70000M");
    ini_set('max_execution_time', 900);
    ob_start();
    session_start();

    error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);

    ############################################
    #   Database Server
    ############################################

    if($_SERVER['HTTP_HOST']=="localhost")
    {
        define("DB_NAME","DB_NAME");
        define("SERVER_NAME","SERVER_NAME");
        define("USER_NAME","USER_NAME");
        define("PASSWORD","PASSWORD");
    }
    else
    {
        define("DB_NAME","DB_NAME");
        define("SERVER_NAME","SERVER_NAME");
        define("USER_NAME","USER_NAME");
        define("PASSWORD","PASSWORD");
    }



    #############################################
    #       File paths
    #############################################
    // For  the Database file path
    include("system/classmysql.inc.php");



    //For the inc folders
    define("INC","inc/");

    //For the Function File of the pages folders
    define("FUNC","func/");

    //For the path of the system folder
    define("SYSTEM","system/");


    $table_prefix = 'dep_';

    ################################################################
    #       Database Class
    ################################################################
    $obj_db = new dbclass();

    ?>

**Function Page**


    <?php
    // IF admin is not logged in 
    if(!isset($_SESSION['session_id']))
    {
        header("location:index.php");
    }

    $backpage = 'page.php?type=staff&';
    if(isset($_REQUEST['endbtn']) && trim($_REQUEST['endbtn']) == "Back")
    {
        header("location:".$backpage);
        die();
    }

    // INSERT into database.
    if(isset($_REQUEST['submit']) && trim($_REQUEST['submit']) == "Submit")
    {   
        $pass = addslashes(trim($_REQUEST['password']));
        $password = encrypt($pass, "deppro");

        $username = addslashes(trim($_REQUEST['username']));

        $sql = "select * from ".$table_prefix."users where `UserName` ='".$username."'";
        $result = $obj_db->select($sql);
        if(count($result) == 0)
        {

        $insert="INSERT INTO ".$table_prefix."users (`UserName`)VALUES ('".$username."')";
        $sql=$obj_db->insert($insert);

        $newuserid = mysql_insert_id($obj_db->CONN);
        }
    header("location:".$backpage."msg=send&alert=2");
        die();
    }   

    // DELETE record from database
    if(isset($_REQUEST['action']) && trim($_REQUEST['action'])==3)
    {
        if(isset($_REQUEST['id']) && trim($_REQUEST['id']!=""))
        {   
            $id =  site_Decryption($_REQUEST['id']);
            $sql_del = "Delete from ".$table_prefix."users where StaffID ='$id'";
            $del = $obj_db->sql_query($sql_del);
            header("location:".$backpage."msg=delete&alert=2");
            die();
        }
    }


    // UPDATE the record
    $action=1;
    if((isset($_REQUEST['action']) && trim($_REQUEST['action'])==2) && (!(isset($_REQUEST['submit']) && trim($_REQUEST['submit']) == "Submit")))
    {
        if(isset($_REQUEST['id']) && trim($_REQUEST['id']!=""))
        {
            $id =  site_Decryption($_REQUEST['id']);

            //$id =  $_SESSION['depadmin_id'];
            $sql = "select * from ".$table_prefix."users where StaffID ='$id'";
            $result = $obj_db->select($sql);
            if($result)
            {
                foreach($result as $row)
                {
                    $title = stripslashes($row['StaffTitle']);

                    $action=2;
                }
            }
            if(isset($_REQUEST['submit']) && trim($_REQUEST['submit']) == "Update")
            {   

                $title = addslashes(trim($_REQUEST['title']));


                $sql_upd ="UPDATE ".$table_prefix."users SET `StaffTitle` = '$title' WHERE StaffID ='$id'";
                $result = $obj_db->sql_query($sql_upd);
                $action=1;
                header("location:".$backpage."msg=edited&alert=2");
                die();
            }       
        }
    }



    if(isset($_REQUEST['vid']) && trim($_REQUEST['vid']!=""))
     {
            $id =  site_Decryption($_REQUEST['vid']);
            $sql = "select * from ".$table_prefix."users where StaffID ='$id'";
            $result = $obj_db->select($sql);
            if($result)
            {
                foreach($result as $row)
                {
                    $username = stripslashes($row['UserName']);             
                }
            }
    }


    ?>

<td class="center"><a href="cproperty.php?script=edit&action=2&id=<?php echo site_Encryption($sql[$j]['PropertyID']); ?>"><span class="editbutton">&nbsp;</span></a> &nbsp;<a href="cproperty.php?action=3&id=<?php echo site_Encryption($sql[$j]['PropertyID']); ?>" onClick="return confirm('Are you sure to delete?');"><span class="deletebutton">&nbsp;</span></a>&nbsp; <a class="lightbox" title="View" href="cpropertyview.php?script=view&vid=<?php echo site_Encryption($sql[$j]['PropertyID']); ?>&lightbox[width]=55p&lightbox[height]=60p"><span class="viewbutton">&nbsp;</span></a></td>