在准备好的陈述中获取

时间:2016-12-28 18:35:39

标签: php mysqli

我试图将以下内容转换为预测语句。你能告诉我哪里出错了。

$userid = mysqli_real_escape_string($con, $_SESSION['usr_id']);
$user = mysqli_query($con, "SELECT * FROM users WHERE id = '" . $userid . "'");
$row = mysqli_fetch_array($user);

我没有运气试图转换它。到目前为止我所拥有的:

$userid = mysqli_real_escape_string($db, $_SESSION['usr_id']);
$userinfo = $db->prepare("SELECT * FROM users WHERE id = ?");
$userinfo->bind_param("i", $userid);
$userinfo->execute();
$row = $userinfo->fetch_assoc();
$userinfo->close();

进一步在代码中(至于为什么我需要这个):

<input class="form-control" name="charname" value="<?php echo $row["charname"]; ?>" required/>

编辑1:

(我还没有尝试过localhost。但是当我使用get_result()替代它时它仍然无效)

$userinfo = $db->prepare("SELECT * FROM users WHERE id = ?");
$userinfo->bind_param("i", $_SESSION['usr_id']);
$userinfo->execute();
$result = $userinfo->get_result();
$userinfo->close();

$row = $result->fetch_assoc();

当我将其更改回来时,它可以正常工作。

$userid = mysqli_real_escape_string($con, $_SESSION['usr_id']);
$user = mysqli_query($con, "SELECT * FROM users WHERE id = '" . $userid . "'");
$row = mysqli_fetch_array($user);

编辑2:

删除了get_result();在编辑1

$ db用于连接。

$db = new mysqli($servername, $username, $password, $dbname);

if (mysqli_connect_errno()) {
    printf("Error: %s\n", mysqli_connect_error());
    exit();
} 

-

var_dump($userinfo->execute());

返回:

bool(true)

-

var_dump($result);

返回:

object(mysqli_result)#4 (5) { ["current_field"]=> int(0) ["field_count"]=> int(11) ["lengths"]=> NULL ["num_rows"]=> int(1) ["type"]=> int(0) }

1 个答案:

答案 0 :(得分:1)

请看下面的这句话,

$row = $userinfo->fetch_assoc();

$userinfo是一个语句对象,而不是mysqli_result对象。所以你不能在你的代码中使用它,比如 。使用->get_result()方法从预准备语句中获取结果集,然后从结果集中获取行,如下所示:

$userinfo = $db->prepare("SELECT * FROM users WHERE id = ?");
$userinfo->bind_param("i", $userid);
$userinfo->execute();
$result = $userinfo->get_result();
$userinfo->close();

$row = $result->fetch_assoc();

稍后,您可以在输入元素中使用此$row变量,

<input class="form-control" name="charname" value="<?php echo $row["charname"]; ?>" required/>

旁注:

  • 如果您正在使用预准备语句,那么您不必使用mysqli_real_escape_string()函数转义任何内容。您可以在$_SESSION['usr_id']方法中直接使用->bind_param(),如下所示:

    $userinfo->bind_param("i", $_SESSION['usr_id']);
    
  • ->get_result()方法仅适用于MySQL Native驱动程序(mysqlnd),因此如果您没有安装 特定驱动程序,它将无效。