2013-03-31 3 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

Смежные вопросы