【发布时间】:2016-12-28 18:35:38
【问题描述】:
我正在尝试将以下内容转换为预测语句。你能告诉我我哪里出错了。
$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) }
【问题讨论】:
-
使用bind_param时不需要做real_escape_string。当你尝试时会发生什么?
-
@aynber 即使没有它仍然无法工作
-
它不起作用怎么办?您收到错误消息吗?尝试使用
mysqli_error()看看它是否为您提供任何信息。 -
@aynber 没有来自 mysqli_error() 的错误消息
-
twitter.com/ShrapnelCol/status/811554258927702016 不必猜测正确的语法,您必须从手册页中学习。然后转到 PDO