【问题标题】:Use of MySQLi within a class在类中使用 MySQLi
【发布时间】:2014-01-14 14:24:53
【问题描述】:
function __construct(mysqli $db, $country = NULL, $sport = NULL) {
    $this->db = $db;
    $this->country = base64_decode($country);
    $this->sport = base64_decode($sport);
}

public function GetColor($colorcode) {
    $query = 'SELECT naam_nl FROM colors WHERE code = $colorcode';
    $result = $this->db->query($query);
    while ($row = $result->fetch_assoc()) { // Line 21
        echo $row['naam_nl'];
    }
    $result->close();
}

给我:

Fatal error: Call to a member function fetch_assoc() on a non-object in /home/cloud/public/td/teamdresser.class.php on line 21

所以我尝试了:

    $result = $this->db->query($query);
    while ($row = $this->db->fetch_assoc($result)) {
        echo $row['naam_nl'];
    }

然后……

Fatal error: Call to undefined method mysqli::fetch_assoc() in /home/cloud/public/td/teamdresser.class.php on line 21

我做错了什么..有人能指出我正确的方向吗?

【问题讨论】:

  • 关键是您的查询返回了其他内容,然后是 mysqli_result 对象。可能是false。 - color字段是数值吗?如果不是你错过了查询中的引号
  • 做一些错误检查。您的查询失败。检查$this->db->query($query)的返回值,如果是false,检查$this->db->error的错误信息。

标签: php mysqli


【解决方案1】:

就像 cmets 说的,你需要做一些错误检查:

public function GetColor($colorcode) {
    $query = 'SELECT naam_nl FROM colors WHERE code = $colorcode';
    $result = $this->db->query($query);
    if ($result === false) {
        // Throw or handle an error here
    } else {
        while ($row = $result->fetch_assoc()) { // Line 21
            echo $row['naam_nl'];
        }
        $result->close();
    }
}

此外,您还需要 mysqlnd 驱动程序:Fatal error: Call to undefined method mysqli_result::fetch_all()

【讨论】:

  • 我知道,但查询没有失败.. 这是fetch_assoc.. 使用您的脚本仍然有以下错误:Fatal error: Call to undefined method mysqli::fetch_assoc() in /home/cloud/public/td/teamdresser.class.php on line 21
  • 这可能是解决方案:stackoverflow.com/questions/11664536/…
【解决方案2】:

这部分错了:

public function GetColor($colorcode) {
    $query = 'SELECT naam_nl FROM colors WHERE code = $colorcode';

使用单引号时,PHP 不会插入 $colorcode。使用双引号:

$query = "SELECT naam_nl FROM colors WHERE code = $colorcode";

评论

  • 始终检查返回值!这使得发现错误变得更加容易。

  • 为什么不使用准备好的语句?

【讨论】:

  • 已编辑,但仍然是相同的错误代码。这是fetch_assoc,而不是查询本身。
  • @JoranDenHouting 它查询。由于失败,fetch_assoc 将“在非对象上调用”。请在$this->db->query 之后添加var_dump($result)
猜你喜欢
  • 2013-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-22
  • 1970-01-01
相关资源
最近更新 更多