我的问题相当简单:是否可以在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_result
和bind_result()
类似于PDO的fetch()
命令。
答案 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_result
和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开始。
答案 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();
}