10

store_result()我的问题很简单:是否可以使用bind_result()PHP PDO?

这是我遇到的一些示例代码:

$stmt = $mysqli->prepare("SELECT id, username, password, salt FROM members WHERE email = ? LIMIT 1")) { 
  $stmt->bind_param('s', $email); // Bind "$email" to parameter.
  $stmt->execute(); // Execute the prepared query.
  $stmt->store_result();
  $stmt->bind_result($user_id, $username, $db_password, $salt); // get variables from result.
  $stmt->fetch();

我已经看到这些在上下文中使用mysqli,但不是在 PHP PDO 中使用。 store_result()bind_result()在 www.php.net 上的 mysqli 中引用。我很好奇它们是否有效,或者是否有类似的方法。

编辑:显然这两种方法之间有一些翻译。我的假设是, store_result并且bind_result()类似于 PDO 的fetch()命令。

4

3 回答 3

10

关键是,将 store_result() 和 bind_result() 与 PDO 一起使用绝对没有意义
只需获取您的数据并在您希望的任何地方使用它。这就是 PDO 的意义所在。

$sql  = "SELECT id, username, password, salt FROM members WHERE email = ? LIMIT 1";
$stmt = $pdo->prepare($sql);
$stmt->execute(array($email));
$row  = $stmt->fetch();

现在你有你的用户数据在$row数组中。

现在很少将结果行存储在单独的变量中。但是,如果您更喜欢这种古老的数据处理方式,您可以添加

extract($row);

到上面的代码来获取你的全局变量。

mysqli-way 的主要问题是无论在何种抽象级别上都很难使用它。

在现实生活中,我们从不在全局范围内调用数据库,而是在这样的函数中调用

function getUserData() {
    // getting data
    return $array;
}

由于某种原因,这个简单但最常用的代码在 mysqli 中变得极其困难!在现实生活中,我们不需要单独的变量,而是需要返回单个数组。但是使用 mysqli 我们需要先获取这些变量,然后将它们放入数组中,然后才返回它们。简直疯了!

于 2013-06-04T05:16:45.913 回答
3

而不是store_resultand bind_result; 您可以使用语言构造list。一个示例用法应该是:

$stmt = $pdo->prepare("SELECT id, username, password, salt 
    FROM members 
    WHERE email = ? 
    LIMIT 1")
$stmt->bindValue( 1, $email, PDO::PARAM_STR);
$stmt->execute();
list($user_id, $username, $db_password, $salt) = $stmt->fetch( PDO::FETCH_NUM );

使用PDO::FETCH_NUM是因为:

list()仅适用于数值数组并假设数值索引从 0 开始。

于 2013-06-04T05:08:26.747 回答
1

这是可能的,我最近在我的项目中使用过。

$prep_stmt = "SELECT id FROM member WHERE username = ? LIMIT 1";
$stmt = $mysqli->prepare($prep_stmt);

if ($stmt) 
{
    $stmt->bindparam(1, $username);
    $stmt->execute();
    $result=$stmt->fetchALL(PDO::FETCH_OBJ);
}
if ($stmt->rowCount() == 1) 
{
    echo"user exist";
    $stmt->close();
}
于 2014-11-05T04:26:00.007 回答