使用准备好的PHP MYSQL语句向数据库插入空值
嗨,我第一次使用准备好的语句。我有一个表单,它的值,我使用Mysqli准备的语句插入Mysql数据库。但问题是,如果用户将输入框留空,则查询不会将行插入数据库 形式 然后它就会起作用,其中大多数都是被接受的答案。我很困惑为什么这个解决方案对我不起作用 非常感谢您的帮助…谢谢您的查询有误:使用准备好的PHP MYSQL语句向数据库插入空值,php,mysql,mysqli,prepared-statement,bindparam,Php,Mysql,Mysqli,Prepared Statement,Bindparam,嗨,我第一次使用准备好的语句。我有一个表单,它的值,我使用Mysqli准备的语句插入Mysql数据库。但问题是,如果用户将输入框留空,则查询不会将行插入数据库 形式 然后它就会起作用,其中大多数都是被接受的答案。我很困惑为什么这个解决方案对我不起作用 非常感谢您的帮助…谢谢您的查询有误: if ($stmt = $mysqli->prepare("INSERT INTO login VALUES('',?,?,?,?,?,'')")) { 应该是这样的: if (!empty($name
if ($stmt = $mysqli->prepare("INSERT INTO login VALUES('',?,?,?,?,?,'')")) {
应该是这样的:
if (!empty($name) || !empty($pass) || !empty($email))
{
$stmt = $mysqli->prepare("INSERT INTO login(`name`,`password`,`email`,`sex`,`city`) VALUES(?,?,?,?,?)");
$stmt->execute([$name, $pass, $email, $sex, $city]);
echo "result inserted";
} else {
echo 'You have not entered all of the fields.';
}
在本例中,如果变量不是空的,则执行insert。否则,如果它们是空的,则会发出回声,说明字段尚未填充
如果您很高兴字段为空,只需更改!从空到空,但正如上面Fred-ii所述,确保您的数据库在字段中允许NULL。这可能不是最聪明的方法之一,但是,嘿,这将完成任务 在将变量分配给$\u POST字段之前,需要做的一件事是,检查该$\u POST字段是否已设置且不为空,然后分配值(如果不为空),当前,如果在运行查询时有人遗漏了表单中的某个字段,则可能会收到未定义的通知 这就是你能做的
<?php
if (isset($_POST['submit'])) {
include_once('includes/db.php');
if (!empty($_POST['name'])) {
$name = $_POST['name'];
} else {
$name = " ";
}
if (!empty($_POST['pass'])) {
$pass = $_POST['pass'];
} else {
$pass = " ";
}
if (!empty($_POST['email'])) {
$email = $_POST['email'];
} else {
$email = " ";
}
if (isset($_POST['sex'])) {
$sex = $_POST['sex'];
} else {
$sex = " ";
}
if (!empty($_POST['city'])) {
$city = $_POST['city'];
} else {
$city = " ";
}
if ($stmt = $mysqli->prepare("INSERT INTO login VALUES(?,?,?,?,?)")) {
$stmt->bind_param("sssss", $name, $email, $pass, $sex, $city);
$stmt->execute();
if ($stmt) {
echo "result inserted";
} else {
echo "could not insert";
}
}
}
?>
还有其他更好的方法可以做到这一点。确保数据库可以有空值。使用具有默认值的三元运算符;做这件事的方法太多了--永远不要存储纯文本密码!请使用PHP来处理密码安全性。如果您使用的PHP版本低于5.5,则可以使用密码\u散列。在散列之前,请确保对它们进行了清理或使用了任何其他清理机制。这样做会更改密码,并导致不必要的额外编码。、、、、、、、、、、、?这两个列可能在此处失败,因此不确定这些列被索引为哪些列。检查else中查询mysqli_error$mysqli的错误。旁注:如果选中一个单选按钮,则会强制人们询问自己的性别,如果他们是女性,则会强制选择另一个单选按钮。有些人可能不想透露这些信息,只是说。@fred well YCS是唯一一个回答1000多个PDO问题的人,似乎在每个答案中都链接到他的博客^ ^注意这里的讽刺,当然,但这个字段似乎不是必需的,所以!空$city可能不需要。我建议使用三元运算符。我想他们必须选择如何处理表单/输入。此外,单选按钮似乎也不是必需的。OP需要决定他们想做什么。非常正确,谢谢你指出。我会进行相应的调整,使其更准确。单选按钮不使用空按钮,而是使用isset,有点旁注-是的,我没有检查表格是否正确,我现在会解决这个问题
if (!empty($name) || !empty($pass) || !empty($email))
{
$stmt = $mysqli->prepare("INSERT INTO login(`name`,`password`,`email`,`sex`,`city`) VALUES(?,?,?,?,?)");
$stmt->execute([$name, $pass, $email, $sex, $city]);
echo "result inserted";
} else {
echo 'You have not entered all of the fields.';
}
<?php
if (isset($_POST['submit'])) {
include_once('includes/db.php');
if (!empty($_POST['name'])) {
$name = $_POST['name'];
} else {
$name = " ";
}
if (!empty($_POST['pass'])) {
$pass = $_POST['pass'];
} else {
$pass = " ";
}
if (!empty($_POST['email'])) {
$email = $_POST['email'];
} else {
$email = " ";
}
if (isset($_POST['sex'])) {
$sex = $_POST['sex'];
} else {
$sex = " ";
}
if (!empty($_POST['city'])) {
$city = $_POST['city'];
} else {
$city = " ";
}
if ($stmt = $mysqli->prepare("INSERT INTO login VALUES(?,?,?,?,?)")) {
$stmt->bind_param("sssss", $name, $email, $pass, $sex, $city);
$stmt->execute();
if ($stmt) {
echo "result inserted";
} else {
echo "could not insert";
}
}
}
?>