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

时间:2014-02-18 01:09:25

标签: mysql database 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。我做了第一个,可以如何获得他的身份证?循环结果行?或者我需要写另一个SQL?我也对store_result()和get_result()感到困惑。

2 个答案:

答案 0 :(得分:2)

您有两个选择。您可以将结果提取到数组中或将其存储并绑定到变量。您应该几乎总是选择第一个选项。

选项1-input_df['Department']=( input_df['Email'].map(compare_df.set_index('Email')['Department']) .fillna(input_df['Department']) )

get_result()

选项2-$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']; }

要使用此选项,您必须知道结果集中列的顺序,这意味着您不应使用store_result()

SELECT *

如您所见,第一个选项更容易,更清洁。唯一的缺点是,使用极老的PHP版本(PHP <5.4)时,您可能会遇到问题。

答案 1 :(得分:1)

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

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