Php 在mysqli中使用prepare语句检索行结果
我想检查用户是否存在并选择他的ID。我做了第一个,可以如何获取他的ID吗?循环查看行结果?或者我需要编写另一个SQL?我对store_result()和get_result()感到困惑。我认为您应该在执行查询后获取结果,以检索所有记录,如下所示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-&
$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
}