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

是否可以将store_result()和bind_result()与PHP PDO一起使用?,php,pdo,mysqli,Php,Pdo,Mysqli,我的问题相当简单:是否可以将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. $s

我的问题相当简单:是否可以将
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
的上下文中看到过这些,但在phppdo中没有看到<代码>存储结果()和
绑定结果()
在www.php.net上的mysqli中引用。我很好奇它们是否有效,或者是否有可比的方法


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

而不是
存储结果
绑定结果
;您可以使用语言构造。示例用法应为:

$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开始


关键是,在PDO中使用store_result()或bind_result()绝对没有意义
只需获取您的数据,并在您希望的任何地方使用它。这正是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方式的主要问题是,无论抽象级别如何,都很难使用它

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

function getUserData() {
    // getting data
    return $array;
}
由于某种原因,这个简单但常用的代码在mysqli中变得极其困难!
在现实生活中,我们不需要单独的变量,而是需要返回单个数组。但对于mysqli,我们需要首先获取这些变量,然后将它们放入数组中,然后返回它们。简直疯了

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

$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();
}

这是一个很好的观点。我觉得很奇怪,因为我只使用PDO。这似乎比我过去实施的步骤还要多。首先,您强调它没有任何意义,然后立即建议既不要使用store\u result,也不要使用bind\u result