是否可以将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