2013-03-31 73 views
-1

爲什麼我仍然獲得了不正確的檢查mysql結果?

警告:mysql_fetch_assoc()預計參數1是資源,串

使用下面的函數時給出:?

public function getRowsWhere($table, $order_by, $where_field, $where_match, $limit_start = 0, $limit_end = 1) { 

    // query Table 
    $query_string = "SELECT * FROM $table WHERE $where_field='$where_match' ORDER BY '$order_by' DESC LIMIT $limit_start, $limit_end"; 

    // run query 
    $sql = new DBQuery($this->database); 
    $result = $sql->prepareQuery($query_string); 

    if ($result) { 
     // initialize results array 
     $match_array = []; 

     // iterate through array and place results in an array at row index 
     $r = 0; 
     while ($row = mysql_fetch_assoc($result)) { 
      $row_array = []; 
      $c  = 0; 
      while ($c < mysql_num_fields($result)) { 
       $col     = mysql_fetch_field($result, $c); 
       $row_array[$col->name] = $row[$col->name]; 
       $c++; 
      } 
      $match_array[$r] = $row_array; 
      $r++; 
     } 
    } 

    // return data 
    return $match_array; 
} 

這是從以下稱爲:

if (!$breadcrumbs->getCrumb(2)) { 
    $project_details = $copy->getRows('projects', 'id', 'DESC', 0, 1); 
} 
else { 
    $project_details = $copy->getRowsWhere('projects', 'id', 'id', $breadcrumbs->getCrumb(2), 0, 1); 
    if (!$project_details) { 
     $project_details = $copy->getRows('projects', 'id', 'DESC', 0, 1); 
    } 
} 

按照要求:一流的DBQuery。這都是相當基本的東西。

<?php 

class DbQuery extends DbMan { 

    /** 
    * PARAMETERS 
    * 
    *^@param array $database   -> database connection information 
    * -------------------------------------------------------------------------- 
    */ 
    protected $database; 

    /** 
    * -------------------------------------------------------------------------- 
    * PUBLIC 
    * __construct() 
    * = set database object to use 
    * 
    *^@param string $database   -> database connection information 
    * -------------------------------------------------------------------------- 
    * 
    */ 
    public function __construct($database) { $this->database = $database; } 

    /** 
    * -------------------------------------------------------------------------- 
    * PUBLIC 
    * prepareQuery() 
    * = checks Sql, executes query to return requested data set 
    * 
    *^@param string $query_request  -> query string 
    * ~ @return object $result_dataset -> result data set 
    * -------------------------------------------------------------------------- 
    * 
    */ 
    public function prepareQuery($query_request) { 

     // retrieve result dataset 
     $result_dataset = $this->executeQuery($query_request); 

     // return result data set 
     return $result_dataset; 
    } 
} 

它擴展了類,DBMAN:

<?php 
class DbMan { 

    /** 
    * PARAMETERS 
    * 
    *^@param array $database   -> database connection information 
    * @param object $mysql_connection -> database connection object 
    * @param object $mysql_connection -> database object 
    * -------------------------------------------------------------------------- 
    */ 
    protected $database; 
    private $mysql_connection; 
    private $mysql_db; 

    /** 
    * -------------------------------------------------------------------------- 
    * PUBLIC 
    * __construct() 
    * = empty constructor 
    * 
    *^@param  -> 
    * -------------------------------------------------------------------------- 
    * 
    */ 
    public function __construct() { } 

    /** 
    * -------------------------------------------------------------------------- 
    * PROTECTED 
    * dbConnect() 
    * = open connection to MySql and connect to database 
    * 
    *^@param  -> 
    * -------------------------------------------------------------------------- 
    * 
    */ 
    protected function dbConnect() { 

     // connect to MySQL 
     $this->mysql_connection = mysql_connect($this->database['hostname'], $this->database['username'], $this->database['password']) 
      or die('Unable to connect to MySQL : ' . mysql_error()); 

     // connect to database 
     $this->mysql_db = mysql_select_db($this->database['database'], $this->mysql_connection) 
      or die('Unable to connect to database : ' . mysql_error()); 
    } 

    /** 
    * -------------------------------------------------------------------------- 
    * PROTECTED 
    * executeQuery() 
    * = run query on database 
    * 
    *^@param string $query   -> sql statement string 
    * ~ @return result $query_result -> result of query 
    * -------------------------------------------------------------------------- 
    * 
    */ 
    protected function executeQuery($query) { 

     // open connection to the database 
     $this->dbConnect(); 

     // run sql query on database 
     $query_result = mysql_query($query) 
      or die('Could not run query on table:<br />' . mysql_error()); 

     // close database connection 
     mysql_close($this->mysql_connection); 

     // Check to make sure data is returned 
     if (mysql_num_rows($query_result)) { 
      // return result data set 
      return $query_result; 
     } 
     else { 
      // return nothing 
      return "No Data Available"; 
     } 
    } 
} 

我希望這是更清楚..

+0

[請勿在新代碼中使用'mysql_ *'函數](http://stackoverflow.com/q/12859942/1190388)。他們不再被維護,並[正式棄用](https://wiki.php.net/rfc/mysql_deprecation)。看到紅色框?改爲了解準備好的語句,然後使用[tag:PDO]或[tag:MySQLi]。 – hjpotter92

+0

你似乎使用某種庫,因爲'DBQuery'不是一個普通的PHP類。你應該提供更多的細節。 –

+0

什麼是'$ sql-> prepareQuery'? – hjpotter92

回答

0

你關閉此連接:

// close database connection 
    mysql_close($this->mysql_connection); 

    // Check to make sure data is returned 
    if (mysql_num_rows($query_result)) { 
     // return result data set 
     return $query_result; 
    } 
    else { 
     // return nothing 
     return "No Data Available"; 
    } 

哪意味着mysql_num_rows返回FALSE,所以字符串No Data Available被返回,因此出現mysql_fetch_assoc() expects parameter 1 to be resource, string given錯誤。

+0

謝謝。我想我現在只會忽略錯誤,然後再從mysql切換。 – obmon