我试图将以下内容转换为预测语句。你能告诉我哪里出错了。
$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/>
(我还没有尝试过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);
删除了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) }
答案 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),因此如果您没有安装 特定驱动程序,它将无效。