【问题标题】:Call to undefined method mysqli::data_seek()调用未定义的方法 mysqli::data_seek()
【发布时间】:2016-08-07 03:13:33
【问题描述】:

我目前正在将我的网站从 MySQL 转换到 MySQLi,但遇到了问题。我一直在寻找几个小时,但我找到的结果都无法帮助我。在我的 connect.php 文件中,我有以下代码:

<?php

connect_db();

function connect_db() {
    $connect_error = 'Sorry, we are experiencing connection issues.';
    $mysqli = mysqli_connect('localhost', 'root', '', 'db') or die($connect_error);

}

function mysqli_result($res, $row, $field=0) {
    $res->data_seek($row);
    $datarow = $res->fetch_array();
    return $datarow[$field];
}

?>

mysqli_result()login.phpregister.php 中被调用。

每当我尝试登录或注册时,都会收到以下错误:

致命错误:在第 10 行调用 C:\xampp\htdocs\core\database\connect.php 中未定义的方法 mysqli::data_seek()

第 10 行包含 $res->data_seek($row);

这是我的 php.ini 文件中的扩展名:

extension=php_bz2.dll
extension=php_curl.dll
extension=php_fileinfo.dll
extension=php_gd2.dll
extension=php_gettext.dll
;extension=php_gmp.dll
;extension=php_intl.dll
;extension=php_imap.dll
;extension=php_interbase.dll
;extension=php_ldap.dll
extension=php_mbstring.dll
extension=php_exif.dll
extension=php_mysql.dll
extension=php_mysqli.dll
;extension=php_oci8_12c.dll
;extension=php_openssl.dll
;extension=php_pdo_firebird.dll
extension=php_pdo_mysql.dll
;extension=php_pdo_oci.dll
;extension=php_pdo_odbc.dll
;extension=php_pdo_pgsql.dll
extension=php_pdo_sqlite.dll
;extension=php_pgsql.dll
;extension=php_shmop.dll

编辑:

这是使用 mysqli_result 的地方:

function user_count() {
    $mysqli = connect_db();
    $query = mysqli_query($mysqli, "SELECT COUNT(`user_id`) FROM `users` WHERE `active` = 1");
    return mysqli_result($mysqli, $query, 0);
}

【问题讨论】:

  • 你检查$res是否是一个有效的Mysqli结果对象?你如何以及在哪里调用你的 mysqli_result() ?
  • 什么是 $res 我猜它不是 MYSQLI_Statement 对象或 MYSQLI_Result 对象 告诉我们你是如何创建 $res
  • @Vincent 对不起,我可能应该记住这一点。我将编辑问题并在底部添加。
  • Erm... 你添加了一个返回到你的connect_db() 函数??我给的答案是什么!!现在它是一个不同的问题!!!!

标签: php mysqli xampp


【解决方案1】:

其实这个问题可能与你没有从connect_db()返回值有关

如果不返回$mysqli 变量,您的连接对象将对脚本的其余部分完全不可见!事实上,一旦这个函数完成,它甚至不会存在

所以修改为这个

function connect_db() {
    $connect_error = 'Sorry, we are experiencing connection issues.';
    $mysqli = mysqli_connect('localhost', 'root', '', 'db') or die($connect_error);
    return $mysqli;
}

有一种更简单的方法:

function user_count() {
    $mysqli = connect_db();
    $query = mysqli_query($mysqli, "SELECT COUNT(`user_id`) FROM `users` WHERE `active` = 1");
    return mysqli_result($mysqli, $query, 0);
}

像这样,通过在结果列中添加别名,即可用名称

function user_count() {
    $mysqli = connect_db();  // ??
    $query = mysqli_query($mysqli, "SELECT COUNT(`user_id`) as num 
                                    FROM `users` WHERE `active` = 1");
    $row = mysqli_fetch_array($query, MYSQLI_ASSOC);
    return row['num'];
}

每个脚本连接一次数据库也是一个更好的主意,而不是每次访问数据库一次,因为连接是一个相当耗时的操作!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    • 1970-01-01
    • 2023-04-07
    • 2020-09-22
    • 1970-01-01
    • 2012-08-10
    相关资源
    最近更新 更多