问题
I'm writing a class and handful of functions to connect to the database and retrieve the information from the tables. I went through previous posts having similar titles, but most of them have written using mysql functions and I am using mysqli functions.
I want somebody who can go through this simple script and let me know where I am making my mistake.
This is my 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);
        }
    }
    ?>
This is my 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();
?>
I am getting the error saying that Error querying the Database.
回答1:
The problem is either this:
    public function fetch($sql)
    {        
        $array = mysqli_fetch_array($this->query($sql));          
        return $array;
    }
or this:
 while($array = $connection->fetch($query))
Because you are using the result from the query to query again. Basically, you are doing:
$r = mysqli_query($this->dbc, $sql);
$array = mysqli_fetch_array(mysqli_query($this->dbc, $r));
And you are getting an error, because $r is not a query string. When it's converted to a string, it's a "1" (from your other comment).
Try changing the function to (changed name of variable so you can see the difference):
    public function fetch($result)
    {        
        return mysqli_fetch_array($result);
    }
or just call the function directly.
回答2:
Few problems :-
you don't die without provide a proper mysql error (and is good practice to exit gracefully)
fetch method is only FETCH the first row
mysqli have OO method, why you still using procedural function?
回答3:
If you don't do your own db abstraction for learning php and mysql, you can use Medoo (http://medoo.in/).
It's a free and tiny db framework, that could save a huge work and time.
回答4:
Obviously an error occurs on SELECT * FROM list you can use mysqli_error to find the error:
return mysqli_query($this->dbc, $sql) or die('Error:'.mysqli_error($this->dbc));
This will display the exact error message and will help you solve your problem.
回答5:
Try to check this
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;
    }
 }
    回答6:
The mysqli_fetch_array function in your fetch method requires two parameters which are the SQL result and the kind of array you intend to return. In my case i use MYSQLI_ASSOC.
That is it should appear like this:
public function fetch($sql)
    {
        $array = mysqli_fetch_array($this->query($sql), MYSQLI_ASSOC);
        return $array;
    }
回答7:
**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"> </span></a>  <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"> </span></a>  <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"> </span></a></td>
    来源:https://stackoverflow.com/questions/8474876/connect-to-mysql-database-using-php-oop-concept