MySQLI fetch_array()

Posted

技术标签:

【中文标题】MySQLI fetch_array()【英文标题】: 【发布时间】:2015-02-28 11:39:42 【问题描述】:

我对以下内容有一个小问题

public function getSiteName() 

    $query = "SELECT name FROM siteinfo";
    $result = $this->con->query($query);

    $row = $result->fetch_array(mysqlI_ASSOC);
    printf ("%s (%s)\n", $row["name"]);
  

连接到数据库时我没有收到错误,但是我收到以下信息

Fatal error: Call to a member function fetch_array() on a non-object in /Users/russellharrower/Sites/evocca/etrading/system/core.php on line 15

我想知道为什么它不起作用?我用http://php.net/manual/en/mysqli-result.fetch-array.php

正在使用的引擎是 InnoDB

【问题讨论】:

$result 成功时会返回一个 mysqli_result 对象,失败时返回 FALSE。请与if (!$result) die($this->con->error);联系。 您的另一个问题***.com/q/27731077 包含if (!$conn->connect_errno) $this->connected = true;,所以您确定您的参数正确吗?你可能打算在哪里做$result = $this->conn$result = $this->connected?您的查询显然失败了。 做错误检查。类似if(!$result) ... 我怀疑您是否有类似 .. $con = mysqli_connect("localhost", "root", "","test"); 的连接,您是否尝试使用:$result = $this->con->query($query); ..?然后我认为你缺少$con,而是你有con 【参考方案1】:

所以经过一个小时的调试后,我必须执行以下操作。

对于我的项目,我使用 config.php 作为我放置所有数据库连接定义的位置。

config.php

<?php
define('DBServer','localhost'); // e.g 'localhost' or '192.168.1.100'
define('DBUser','root');
define('DBPass','PASSWORD');
define('DBName','ET5');
?>

core.php

<?php
class sys

  protected $con;

  public function __construct($con) 
    $this->con = $con;
  

  public function getSiteName() 
    $query = "SELECT name FROM siteinfo";
    $result = $this->con->query($query);
    $res = array();
    while ($row = $result->fetch_array()) 
      $res[] = $row['name'];
    
    return $res;
  

?>

Index.php

<?php
require_once("system/config.php");
require_once("system/core.php");
global $con ;
$con = new mysqli(DBServer, DBUser, DBPass, DBName);
if ($con->connect_errno)

  echo "Failed to connect to MySQL: " . mysqli_connect_error();


$sys = new sys($con);
$result = $sys->getSiteName();
print_r($result);
?>

【讨论】:

【参考方案2】:

你总是可以尝试这样的:

取自:http://php.net/manual/en/mysqli-result.fetch-assoc.php

<?php
    $mysqli = new mysqli("localhost", "my_user", "my_password", "world");

    /* check connection */
    if ($mysqli->connect_errno) 
        printf("Connect failed: %s\n", $mysqli->connect_error);
        exit();
    

    $query = "SELECT Name, CountryCode FROM City ORDER by ID DESC LIMIT 50,5";

    if ($result = $mysqli->query($query)) 

        /* fetch associative array */
        while ($row = $result->fetch_assoc()) 
            printf ("%s (%s)\n", $row["Name"], $row["CountryCode"]);
        

        /* free result set */
        $result->free();
    

    /* close connection */
    $mysqli->close();
    ?>

【讨论】:

这个问题是它需要我为每个页面创建一个 .php 文件,我想要一个像 core.php 这样的核心函数 @RussellHarrower 你介意更新你的答案吗?

以上是关于MySQLI fetch_array()的主要内容,如果未能解决你的问题,请参考以下文章

在 MySQLi 中使用 fetch_array 时检测数据类型

致命错误:未识别的方法 mysqli:fetch_array() [重复]

MySQL 性能再次 MySQLi

PHP - 选择然后插入时是不是需要 fetch_array

php中mysqli 处理查询结果集的几个方法

代码实例