簡體   English   中英

MySQLi數據庫連接

[英]MySQLi database connection

我有這個(來自我第一次嘗試數據庫類時派生的其他人):

    require_once( "declarations.php" ); 

    class Database{            
        private static $mysqli;   
        private static $dbName = '';
        private static $username = '';
        private static $password = '';   
        private static $host = 'localhost';
        private static $prefix = '';   

        public function __construct(){  
            if( self::$host & self::$username & self::$password & self::$dbName )
            {
                self::$mysqli = new mysqli( self::$host, self::$username, self::$password, self::$dbName );

                 if (self::$mysqli->connect_error) {
                die('Connect Error (' . self::$mysqli->connect_errno . ') '
                    . self::$mysqli->connect_error);
                }
            }
            else
            {
                echo "You forgot to fill in your database connection details";
            }
        }

        public function Query( $query ){
            $query = self::$mysqli->real_escape_string( $query );

            if ($query = self::$mysqli->prepare($query)) {
                $query->execute();
                $query->store_result();            


                $stmt = $query->result;        
                //$query->mysql_num_rows = $stmt->num_rows();                 
                $query->close();
                return $stmt;                   
            }
        }  

        public function Close()
        {
            self::$mysqli->close(); 
        }
    }                     

這就是我所說的:

    include_once( "system/database.php" );

    $query = "SELECT * FROM app";     
    $dbr = new Database();  

    //Change this here since your method is query and not $mysqli
    while( $row = $dbr->Query( $query )->fetch_object() ){
       echo '<td>'. $row['id'] . '</td>' ;
       echo '<td>'. $row['title'] . '</td>' ;   
    }  

    Database::Close();

我在while循環中的非對象上調用成員函數fetch_object()時出錯。

有任何想法嗎?

fetch_object使用查詢執行后返回的結果集,方法如下:mysql_query或使用fetch_assoc代替

$query->execute();
$result = $query->get_result();
while ($myrow = $result->fetch_assoc()) {
    //Your logic
}

好吧,您的第一次嘗試是完全無法使用的代碼。
有2個嚴重故障和1個嚴重故障。

  1. 正如我已經告訴您的那樣,執行$query = self::$mysqli->real_escape_string( $query ); 立刻變得無用和有害。 您必須擺脫這條線。 完全永久。
  2. 沒有綁定變量的查詢是完全沒有用的。
  3. 您必須檢查mysql錯誤。

因此,至少您的query()函數必須是

public function query($query)
{
    $res = self::$mysqli->query($query);
    if (!$res)
    {
        throw new Exception(self::$mysqli->error);
    }
    return $res;
}

但是同樣,該函數並不安全,因為它沒有實現占位符來替換查詢中的數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM