在非对象上调用成员函数bind_param()?

时间:2015-08-02 07:11:57

标签: php forms mysqli

我知道有很多问题就像这个问题,但我似乎无法找到我做错了什么。我在我的代码和数据库中多次检查过拼写错误。这是我编写的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是复选框。

2 个答案:

答案 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";
}