是否可以将store_result()和bind_result()与PHP PDO一起使用?

时间:2013-06-04 01:49:04

标签: php pdo mysqli

我的问题相当简单:是否可以在PHP PDO中使用store_result()bind_result()

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

$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中使用。 www.php.net上的mysqli引用了store_result()bind_result()。我很好奇它们是否有效,或者是否有类似的方法。

编辑:显然这两种方法之间存在一些转换。我的假设是store_resultbind_result()类似于PDO的fetch()命令。

3 个答案:

答案 0 :(得分:9)

关键是,使用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我们需要先获取这些变量,然后将它们放在数组中,然后才返回它们。只是疯了!

答案 1 :(得分:2)

而不是store_resultbind_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开始。

答案 2 :(得分: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();
}