我知道有很多问题就像这个问题,但我似乎无法找到我做错了什么。我在我的代码和数据库中多次检查过拼写错误。这是我编写的PHP代码,用于将表单详细信息提交到数据库:
<?php
require_once "connect.php";
if(!empty($_POST))
{
if(isset($_POST["email"], $_POST["username"], $_POST["type"], $_POST["question"]))
{
$email = test_input($_POST["email"]);
$username = test_input($_POST["username"]);
$type = test_input($_POST["type"]);
$question = test_input($_POST["question"]);
$premium = ($_POST["premium"]);
$member = ($_POST["member"]);
if ($member != "NO")
{
$member = "YES";
}
}
if(!empty($email) && !empty($username) && !empty($type) && !empty($question))
{
$insert = $db->prepare("INSERT INTO Submissions (Email, Username, Type, Question, Member, Premium, Date) VALUES (?, ?, ?, ?, ?, ?, NOW())");
$insert->bind_param("ssssss", $email, $username, $type, $question, $member, $premium);
if($insert->execute())
{
header("Location: landing.php");
die();
}
}
}
function test_input($data)
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
当我调用var_dump错误时,它返回NULL,但我不明白这意味着什么。与我的数据库的连接也很成功。这些是我的数据库列:“电子邮件”,“用户名”,“类型”,“问题”,“成员”,“高级”,“日期” 除问题和日期外,一切都是varChar。问题是文本,日期是日期时间。 此外,表单字段如下:电子邮件,用户名和问题...这些是输入字段。 type是下拉列表,成员和premium是复选框。
答案 0 :(得分:2)
如错误所示,您的$insert
不是对象。这很可能是因为您使用mysql keywords作为列名(非常糟糕的做法)。如果你必须继续使用这些名称在反引号中包围它们。 (谢谢u_mulder)
$insert = $db->prepare("INSERT INTO Submissions (Email, Username, `Type`, Question, Member, Premium, `Date`) VALUES (?, ?, ?, ?, ?, ?, NOW())");
答案 1 :(得分:0)
我觉得sql查询有问题。如果发送给它的sql语句在当前数据库中无效,则prepare()
将返回false。
您可以通过添加此内容来验证它。
if(!$insert){
echo "Prepare statement failed";
}