$stmt = $db->prepare("SELECT * FROM user WHERE name=?");
$stmt->bind_param('s', $username);
$stmt->execute();
$stmt->store_result();
if($stmt->num_rows > 0){
//retrieve user's id
}
我想检查用户是否存在并选择他的 ID。我办了第一个,请问如何获取他的ID?循环遍历行结果?或者我需要再写一个SQL?我也对 store_result() 和 get_result() 感到困惑。
最佳答案
你有两个选择。您可以将结果提取到数组中,也可以存储它们并绑定(bind)到变量。您几乎应该总是选择第一个选项。
选项 1 - get_result()
$stmt = $db->prepare("SELECT * FROM user WHERE name=?");
$stmt->bind_param('s', $username);
$stmt->execute();
$row = $stmt->get_result()->fetch_assoc();
if ($row) {
echo $row['id'];
}
选项 2 - store_result()
要使用此选项,您必须知道结果集中列的顺序,这意味着您不应使用 SELECT *
$stmt = $db->prepare("SELECT id, col2, col3 FROM user WHERE name=?");
$stmt->bind_param('s', $username);
$stmt->execute();
$stmt->store_result();
if ($stmt->num_rows) {
$stmt->bind_result($id, $col2, $col3); // define your variables
$stmt->fetch(); // fetch a single row fromt he result and assign to the variables
echo $id; // After fetching the variables will be populated
}
正如您所看到的,第一个选项更加简单和清晰。唯一的缺点是,使用非常旧的 PHP 版本 (PHP < 5.4) 时可能会遇到问题。
关于php - 使用 mysqli 中的准备语句检索行结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21842450/