php - 使用 mysqli 中的准备语句检索行结果

标签 php mysql mysqli

$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/

相关文章:

php将特定字符更改为html标签

mysql - "mysql_native_password"失败,无法到达服务器 (ASP.NET)

php - 无法将内爆数组绑定(bind)到 mysql 准备好的语句中

php - 在 PHP 中生成动态 MYSQLi 准备语句

php - 计算 OOP PHP 中返回的行数

php - Facebook API - 删除状态

php - 如何在符号后获取字符串

php - 如何更新多个字段?

从mysql到html表的php输出

java - 从数据库获取日期并在 Java 中进行比较