【问题标题】:Call to a member function bind_param() on a non-object? [duplicate]在非对象上调用成员函数 bind_param()? [复制]
【发布时间】:2015-10-24 12:09:12
【问题描述】:

我知道有很多类似的问题,但我似乎找不到我做错了什么。我已经多次检查我的代码和数据库中的拼写错误。这是我为将表单详细信息提交到数据库而编写的 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,但我不明白这是什么意思。连接到我的数据库也是成功的。这些是我的数据库列:“Email”、“Username”、“Type”、“Question”、“Member”、“Premium”、“Date” 除了 Question 和 Date 之外,一切都是 varChar。问题是文本,日期是日期时间。 此外,表单字段如下:电子邮件、用户名和问题……这些是输入字段。 type 是一个下拉菜单,member 和 premium 是复选框。

【问题讨论】:

    标签: php forms mysqli


    【解决方案1】:

    我认为 sql 查询有问题。如果发送给它的 sql 语句在当前 DB 中无效,则prepare() 将返回 false。

    你可以通过添加来验证它。

    if(!$insert){
      echo "Prepare statement failed";
    }
    

    【讨论】:

      【解决方案2】:

      正如错误所说,您的 $insert 不是对象。这很可能是因为您使用mysql keywords 作为列名(非常糟糕的做法)。如果您必须继续使用这些名称,请将它们用反引号括起来。 (感谢u_mulder

      $insert = $db->prepare("INSERT INTO Submissions (Email, Username, `Type`, Question, Member, Premium, `Date`) VALUES (?, ?, ?, ?, ?, ?, NOW())");
      

      【讨论】:

      • 嗯,我将类型和日期更改为其他内容,但由于某种原因我仍然收到相同的错误...
      • @Razer 请检查错误消息,您的查询由于某种原因失败。
      • 当我使用 var_dump 时,它返回的错误是:NULL
      • @Razer var_dump($insert)$db-&gt;prepare 之后的确切输出是什么?此外,文档中的所有示例都建议使用 if($stmt = $mysqli-&gt;prepare($sql)) 之类的准备,如果您想避免错误,您应该这样做。
      • var_dump 输出的准确错误是:NULL Fatal error: Call to a member function bind_param() on a non-object in.....
      猜你喜欢
      • 2011-05-28
      • 2015-02-02
      • 2013-09-26
      • 2014-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-19
      相关资源
      最近更新 更多