这是我的代码.我正在检查登录/注册系统中是否存在用户:
public function userExist($email){
$stmt = $this->conn->prepare("select email from users where email= ?");
$stmt->bind_param("s", $email);
$stmt->execute();
$stmt->store_result();
if($stmt->num_rows>0){
}
else{
}
}
Run Code Online (Sandbox Code Playgroud)
我可以使用get_result而不是store_result()吗?
tri*_*cot 13
这取决于您计划如何读取结果集.但是在您给出的实际示例中,您对读取任何返回的数据不感兴趣.您唯一感兴趣的是是否有记录.
在这种情况下,您的代码很好,但它对get_result同样有效.
当您想要获得具有给定电子邮件的用户的用户标识时,差异变得更加明显:
SELECT id FROM users WHERE email = ?
Run Code Online (Sandbox Code Playgroud)
如果您打算宣读ID用$stmt->fetch,那么你就坚持
store_result,并会使用bind_result在你想获得这里面变量定义ID,就像这样:
$stmt->store_result();
$stmt->bind_result($userid); // number of arguments must match columns in SELECT
if($stmt->num_rows > 0) {
while ($stmt->fetch()) {
echo $userid;
}
}
Run Code Online (Sandbox Code Playgroud)
如果您希望获得可以调用的结果对象fetch_assoc()或任何fetch_*variant方法,那么您需要使用get_result,如下所示:
$result = $stmt->get_result(); // You get a result object now
if($result->num_rows > 0) { // Note: change to $result->...!
while ($data = $result->fetch_assoc()) {
echo $data['id'];
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,您从中获取结果对象get_result,但情况并非如此store_result.您num_rows现在应该从该结果对象获得.
这两种方式都有效,这实际上是个人偏好的问题.
You*_*nse 10
像往常一样,接受的答案过于局部化,更关注无关紧要的细节而不是答案本身。
可悲的是,还有一个已删除的答案,虽然简洁,但却是一个完美的经验法则:
尽可能使用 get_result 并在其他地方使用 store_result。
这两个函数都将数据库中待处理的结果集加载到 PHP 进程的内存中,get_result()用途更广泛,因此是首选。
之间唯一的区别get_result()和store_result()是,前者得到你熟悉的mysqli_result可用于使用熟悉的获取数据资源/对象fetch_row()/fetch_assoc()例程,还有一个稍微现代fetch_all(),所有这些是无比不是更方便的bind_result()例程是唯一的选项store_result()。
需要注意的get_result()是,只有在使用 mysqlnd 驱动程序时才可用,这在 2019 年及以后不是问题。如果它不可用,您可能需要在共享主机的配置中勾选一些复选框。
| 归档时间: |
|
| 查看次数: |
3303 次 |
| 最近记录: |