使用准备好的语句将空值插入数据库 PHP MYSQL
Inserting null values to database using prepared statements PHP MYSQL
您好,我是第一次使用准备好的语句。我有一个表单,其值正在使用 Mysqli 准备语句插入 Mysql 数据库中。但问题是如果用户将输入框留空,查询不会将行插入数据库。
表格
<form action="test.php" method="post" class="signupform">
<input type="text" Placeholder="Name" name="name" Required="required"/>
<br />
<input type="email" Placeholder="Email-id" name="email" Required="required"/>
<br />
<input type="password" Placeholder="Password" name="pass" Required="required"/>
<br />
<span>Male<input type="radio" name="sex" value="M" checked="checked"/> Female<input type="radio" name="sex" value="F"/></span>
<br />
<input type="text" Placeholder="City" name="city"/>
<br /><br />
<input type="submit" value="CREATE MY ACCOUNT" name="submit"/>
</form>
<?php
if(isset($_POST['submit'])){
include_once('includes/db.php');
$name=$_POST['name'];
$pass=$_POST['pass'];
$email=$_POST['email'];
$sex=$_POST['sex'];
$city = $_POST['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";
}
}
}
?>
在使用上面的表格和查询时,当我填写表格的所有框时,它会为我插入一个新行。但是如果我将输入框留空,它不会插入任何行。
我也看到很多问题说如果我使用这样的变量
if(empty($_POST['city'])) { $city = null; } else { $city = $_POST['city']; }
然后它就会起作用,并且大多数都是被接受的答案。我很困惑为什么这个解决方案对我不起作用???
感谢任何帮助...谢谢
您的查询有误:
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.';
}
在这种情况下,如果变量不为空则执行插入。否则,如果它们是空的,则发出回声,说明字段尚未填写。
如果您对字段为空感到满意,只需将 !empty()
更改为 empty()
但如 Fred -ii- 所述,请确保您的数据库允许字段中的 NULL。
这可能不是最聪明的方法之一,但是嘿,它会完成工作。
在将变量分配给 $_POST 字段之前需要做的一件事是,您需要检查 $_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";
}
}
}
?>
还有其他更好的方法可以做到这一点。
您好,我是第一次使用准备好的语句。我有一个表单,其值正在使用 Mysqli 准备语句插入 Mysql 数据库中。但问题是如果用户将输入框留空,查询不会将行插入数据库。
表格
<form action="test.php" method="post" class="signupform">
<input type="text" Placeholder="Name" name="name" Required="required"/>
<br />
<input type="email" Placeholder="Email-id" name="email" Required="required"/>
<br />
<input type="password" Placeholder="Password" name="pass" Required="required"/>
<br />
<span>Male<input type="radio" name="sex" value="M" checked="checked"/> Female<input type="radio" name="sex" value="F"/></span>
<br />
<input type="text" Placeholder="City" name="city"/>
<br /><br />
<input type="submit" value="CREATE MY ACCOUNT" name="submit"/>
</form>
<?php
if(isset($_POST['submit'])){
include_once('includes/db.php');
$name=$_POST['name'];
$pass=$_POST['pass'];
$email=$_POST['email'];
$sex=$_POST['sex'];
$city = $_POST['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";
}
}
}
?>
在使用上面的表格和查询时,当我填写表格的所有框时,它会为我插入一个新行。但是如果我将输入框留空,它不会插入任何行。
我也看到很多问题说如果我使用这样的变量
if(empty($_POST['city'])) { $city = null; } else { $city = $_POST['city']; }
然后它就会起作用,并且大多数都是被接受的答案。我很困惑为什么这个解决方案对我不起作用???
感谢任何帮助...谢谢
您的查询有误:
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.';
}
在这种情况下,如果变量不为空则执行插入。否则,如果它们是空的,则发出回声,说明字段尚未填写。
如果您对字段为空感到满意,只需将 !empty()
更改为 empty()
但如 Fred -ii- 所述,请确保您的数据库允许字段中的 NULL。
这可能不是最聪明的方法之一,但是嘿,它会完成工作。
在将变量分配给 $_POST 字段之前需要做的一件事是,您需要检查 $_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";
}
}
}
?>
还有其他更好的方法可以做到这一点。