mysqli准备好了 - 将结果存储到数组中?

时间:2013-11-16 16:34:49

标签: mysql mysqli

我想稍微优化这段代码,以使用$ _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正在运行。

1 个答案:

答案 0 :(得分:1)

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

the manual page for the method中记录了这一点。


澄清:

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

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

然而,在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);

$stmt->closeCursor();