【问题标题】:PHP MySQLi Fatal call to member function fetch_array() for a non-objectPHP MySQLi 对非对象的成员函数 fetch_array() 的致命调用
【发布时间】:2014-05-28 14:25:31
【问题描述】:

是的...这个问题已经发布了很多次。这是一个示例:Fatal error: Call to a member function query()on a non-object。但是我浏览了许多这些重复的帖子,找不到解决方案

我从这个网站(nine-to-five)提取了这个(工作)代码

但我修改了我的代码(与 SO 帖子不同)以包含帖子答案中提到的代码,但我仍然收到错误:

// Credentials
  $dbhost = "localhost";
  $dbname = "qmsdb";
  $dbuser = "root";
  $dbpass = "";

  //    Connection
  global $tutorial_db;

  $tutorial_db = new mysqli();
  $tutorial_db->connect($dbhost, $dbuser, $dbpass, $dbname);
  $tutorial_db->set_charset("utf8");

  //    Check Connection
  if ($tutorial_db->connect_errno) {
     printf("Connect failed: %s\n", $tutorial_db->connect_error);
     exit();
  }


  // Get Search
     $search_string = preg_replace("/[^A-Za-z0-9]/", " ", $_POST['query']);
     $search_string = $tutorial_db->real_escape_string($search_string);

  // Check Length More Than One Character
     if (strlen($search_string) >= 1 && $search_string !== ' ') {

  // Build Query
  $query = 'SELECT * FROM compressors WHERE MUNPN LIKE "%'.$search_string.'%" OR name LIKE "%'.$search_string.'%"';

  // Do Search
  $result = mysql_query($query);
  while($results = $result->fetch_array()) {  
    $result_array[] = $results;
}

    .... more code that doesn't apply....

    }

错误是:“Fatal call to member function fetch_array() on a non object”并且该行指向:

    while($results=$results->fetch_array()) {

我对 Php/MySQL 非常陌生 - 因此,我们将不胜感激任何帮助。

谢谢!

.

【问题讨论】:

  • 你在混合mysql和mysqli_
  • 您使用 MySQLi 连接 (new mysqli();),然后使用 mysql_query 执行查询。那是行不通的。
  • ^--« ... 意思,$result = mysql_query($query);改成$result = mysqli_query($query);
  • 如果“更多不适用的代码”意味着拥有更多mysql_*函数,那么就停在那里。
  • 我改成了mysqli_query($query),但我现在得到一个错误“mysqli_query 需要至少 2 个参数”

标签: php mysql mysqli fetch


【解决方案1】:

mysql_*() 函数不是,并且从来没有是面向对象的:

$tutorial_db = new mysqli();
                        ^----note the "i"


$result = mysql_query($query);
               ^-- note the LACK of an "i"
while($results = $result->fetch_array()) { 
                ^^^^^^^^---- not an object, because mysql_*() functions are NOT objects

您不能在任何其他库中使用在一个数据库库(pdo、mysqli、mysql)中创建的数据库句柄/对象。它们可能都在后台与 MySQL 对话,但它们各自的句柄/对象不是相互兼容的。

【讨论】:

  • “他们可能都在与 MySQL 进行幕后交流......但他们今晚不会一起去开车”。
  • 谢谢。但这仍然没有意义。原始代码(从朝九晚五)网站如何工作,但不是这个?
  • 可能是因为它从来没有出现过,或者您在修改它以供自己使用时引入了拼写错误。
猜你喜欢
  • 2013-01-16
  • 1970-01-01
  • 1970-01-01
  • 2014-02-03
  • 1970-01-01
  • 1970-01-01
  • 2012-04-01
  • 2015-08-08
相关资源
最近更新 更多