【发布时间】:2023-04-07 08:17:01
【问题描述】:
我正在尝试使用 Procedural Mysqli 插入表中。它没有发布任何错误,也没有将信息发布到数据库。这是我的代码:
$query = "INSERT INTO Accounts (FirstName, LastName, Username, Password, Access) VALUES ({$_POST['FirstNameTbx']}, {$_POST['LastNameTbx']}, {$_POST['UsernameTbx']}, {$_POST['PasswordTbx']}, {$_POST['AccessDDL']})";
mysqli_query($link, $query);
mysqli_close($link);
$Error .= "$query";
更新: 我改为准备好的声明,现在我得到:
警告:mysqli_stmt::bind_param() [mysqli-stmt.bind-param]:类型定义字符串中的元素数与 /home/bryantrx/public_html/ec/add_user.php 中的绑定变量数不匹配第 19 行
需要绑定的变量只有5个,而且UserID自增,所以不需要在语句中绑定和引用。。
if ($stmt = $link->prepare("INSERT INTO Accounts (FirstName, LastName, Username, Password, Access) VALUES (?, ?, ?, ?, ?)")){
$stmt->bind_param($_POST['FirstNameTbx'], $_POST['LastNameTbx'], $_POST['UsernameTbx'], $_POST['PasswordTbx'], $_POST['AccessDDL']);
$stmt->execute();
$Error .= "success";
$stmt->close();
} else {
echo $link->error;
}
【问题讨论】:
-
你没有要求它有任何错误,所以它没有给你任何错误......原因与你的last post 相同。不要直接将 POST 值注入到查询字符串中,这很危险
-
我可以说明你在这个查询中做错了什么,但真正的解决方案是使用准备好的查询,它会更好地解决问题。
-
你能告诉我我在这里做错了什么吗?我在另一个页面上声明了 $link,我将其包含在其上方的一行中。
-
您没有引用
VALUES子句中的值。 -
如果您使用准备好的查询,则无需担心引用。