Php 在mysqli中使用prepare语句检索行结果

Php 在mysqli中使用prepare语句检索行结果,php,mysql,mysqli,Php,Mysql,Mysqli,我想检查用户是否存在并选择他的ID。我做了第一个,可以如何获取他的ID吗?循环查看行结果?或者我需要编写另一个SQL?我对store_result()和get_result()感到困惑。我认为您应该在执行查询后获取结果,以检索所有记录,如下所示 $stmt = $db->prepare("SELECT * FROM user WHERE name=?"); $stmt->bind_param('s', $username); $stmt->execute(); $stmt-&

我想检查用户是否存在并选择他的ID。我做了第一个,可以如何获取他的ID吗?循环查看行结果?或者我需要编写另一个SQL?我对store_result()和get_result()感到困惑。

我认为您应该在执行查询后获取结果,以检索所有记录,如下所示

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

你有两个选择。您可以将结果提取到数组中,也可以存储它们并绑定到变量。您几乎应该始终选择第一个选项

选项1-
get\u result()
选项2-
存储结果()
要使用此选项,您必须知道结果集中列的顺序,这意味着您不应使用
SELECT*


正如您所看到的,第一个选项更简单、更简洁。唯一的缺点是,在使用非常旧的PHP版本(PHP<5.4)时,您可能会遇到问题。

“我对store_result()和get_result()也感到困惑”--如果您阅读了文档怎么办?@zerkms我读过之后仍然不明白。所以您使用了不理解的函数?那你为什么用它们呢?尝试随机的东西永远不会导致编程的成功。我确信有一个用户的名字是PS:但是如果有多个,你不需要这个
,如果
是的,但是用户可能不存在,如果有多个,你有
,而
,这无关紧要,循环体就不会运行。因此,您需要删除
if
while
——它们一起是对未定义方法mysqli\u stmt::fetch\u array()的冗余调用
$stmt = $db->prepare("SELECT * FROM user WHERE name=?");

$stmt->bind_param('s', $username);
$stmt->execute();

if($stmt->num_rows > 0)
{
    $row = $stmt->fetch_array()
    print_r($row); 
}
$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'];
}
$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
}