【问题标题】:mysqli prepared - store results into array?mysqli 准备 - 将结果存储到数组中?
【发布时间】:2013-11-30 00:23:03
【问题描述】:

我想稍微优化这部分代码以使用诸如 $_SESSION['user']= $arr; 这样的数组。

// Store user db info in session for use
$stmt = $mysqli->prepare("SELECT id,user,pass,email,timezone,lastIP,currIP,dtLastLogin,dtCurrLogin FROM test_users WHERE user = ?");
// bind params
$stmt->bind_param('s', $user);
// execute prepared statement
$stmt->execute();
// Bind result variables
$stmt->bind_result($_SESSION['id'], $_SESSION['user'], $_SESSION['pass'], $_SESSION['email'], $_SESSION['timezone'], $_SESSION['lastIP'], $_SESSION['currIP'], $_SESSION['dtLastLogin'], $_SESSION['dtCurrLogin']); 
// fetch values
$stmt->fetch();     
// close statement
$stmt->close();

我尝试使用:

$rs = $stmt->get_result();
$arr = $rs->fetch_all(MYSQLI_ASSOC);
// close statement
$stmt->close();
//store array into session
$_SESSION['user']= $arr;

但我收到了对未定义方法 mysqli_stmt::get_result() 的调用。我正在运行 php 5.3.8 和 MySQL 5.1.70-cll。

【问题讨论】:

    标签: php mysql mysqli prepared-statement


    【解决方案1】:

    mysqli_stmt::get_result 仅在您运行 MySQL 本机驱动程序 (mysqlnd) 时可用。

    这在the manual page for the method 中有记录。


    澄清一下:

    从 PHP 访问 MySQL 数据库有三种方式:古老的 mysql 函数、现代的 mysqli 函数/类和 PDO mysql 扩展。

    所有这三个都以相同的方式与数据库交互,使用名为libmysqlclient 的库。正确地说,这不是 PHP 的一部分。它是 PHP 使用的 C 库。

    然而,在 PHP 5.3 中,引入了 mysqlnd 驱动程序。这是 PHP 的原生部分(这就是 n 的含义)。在5.3中,需要特意安装。从 5.4 开始,它是访问 MySQL 的默认方式。

    所以要让它工作,要么安装 PHP 5.4,要么使用installation page for mysqlnd 中给出的选项编译 PHP 5.3。

    与此同时,您的方法可能是获取数据的最佳方法。唯一的另一种方法是改用 PDO,这可能会提供更好的语法。例如,这是可能的:

    $stmt = $dbh->prepare("SELECT id,user,pass,email,timezone,lastIP,currIP,dtLastLogin,dtCurrLogin FROM test_users WHERE user = :user");
    $stmt->bindParam(':user', $user);
    $stmt->execute();
    
    $_SESSION['user'] = $stmt->fetch(PDO::FETCH_ASSOC);
    

    【讨论】:

    • 我对此进行了调查,它应该根据我的版本默认启用。我只是查看了我的 php.ini,发现它的引用为零。
    • @user756659 mysqlnd 仅从 5.4 开始默认启用。该方法从 5.3 开始可用,但前提是安装了驱动程序。此方法不可用的唯一原因是它未启用。
    • 我安装了 mysqli 扩展 - 刚刚通过简单的 apache 设置进行了验证。这不添加驱动程序吗?我正在使用的所有其他 mysqli 函数都可以正常工作。
    • @user756659 mysqlnd 不是 mysqli 扩展。
    • 我明白你现在在说什么了。我需要更新 php.ini 文件。话虽如此,有没有办法在不使用 get_result 的情况下完成相同的结果?
    猜你喜欢
    • 1970-01-01
    • 2019-06-17
    • 1970-01-01
    • 2015-07-11
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多