【问题标题】:PHP: Fatal error: Call to a member function bind_param() on a non-objectPHP:致命错误:在非对象上调用成员函数 bind_param()
【发布时间】:2013-10-08 10:03:43
【问题描述】:

错误发生在第42行:

$result->bind_param("ssssisssss", $Firma, $Partner, $Abteilung, $Strasse, $PLZ, $Ort, $Telefon, $Email, $Website, $Info );

这是整个准备好的语句:

$sql = "INSERT INTO `firmen` (`Firma`, `Ansprechpartner`, `Abteilung`, `Strasse`, `PLZ`, `Ort`, `Telefon`, `Email`, `Website`, `Zusatzinfos`) 
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";     
$result = $db->prepare( $sql ); 
$result->bind_param("ssssisssss", $Firma, $Partner, $Abteilung, $Strasse, $PLZ, $Ort, $Telefon, $Email, $Website, $Info );
$result->execute();

我找不到错误,我已经阅读了几乎所有相同错误的问题,我还将我的代码与很多教程进行了比较,它看起来完全一样...

提前致谢!

【问题讨论】:

  • $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);放在$db->prepare()前面看看有什么问题。

标签: php function member


【解决方案1】:

...通常当您在准备语句中出现错误时会发生这种情况, 您可能会在 sql prepare 中出现拼写错误。来验证这一点。 用这个检查错误

       $stmt = $this->db->prepare("INSERT INTO ".TB_ADMINISTRATION."(name, password, email) VALUES (?, ?, ?)"); 
       if(!$stmt)  //if there is an error, then it will be shown!. 
         { // show error                                                                                                       
          echo $this->db->error;
          } else {
           // everything is good to go !. 
         }

【讨论】:

  • 谢谢,假设错误出现在“bind_param”中而浪费了这么多时间,而这只是 sql 中的一个愚蠢的错字。
【解决方案2】:

一个额外的参数,所以我删除了第一个参数: 更改以下内容

$result->bind_param("ssssisssss", $Firma, $Partner, $Abteilung, $Strasse, $PLZ, $Ort, $Telefon, $Email, $Website, $Info );

$result->bind_param($Firma, $Partner, $Abteilung, $Strasse, $PLZ, $Ort, $Telefon, $Email, $Website, $Info );

【讨论】:

    【解决方案3】:

    插入语句中有 10 个值

    $sql = "INSERT INTO `firmen` (`Firma`, `Ansprechpartner`, `Abteilung`, `Strasse`, `PLZ`, `Ort`, `Telefon`, `Email`, `Website`, `Zusatzinfos`)
    

    你在bind->param() 中给出了 11 个参数,就像这样

    $result->bind_param("ssssisssss", $Firma, $Partner, $Abteilung, $Strasse, $PLZ, $Ort, $Telefon, $Email, $Website, $Info );
    

    所以你必须更正参数的数量。因此,要么在插入语句中添加另一列,要么从bind->param() 中删除一个值并保持插入语句不变。

    【讨论】:

      【解决方案4】:

      正如错误消息所说,$result 似乎不是一个对象。尝试在准备调用后立即使用var_dump($result); 进行调试。

      看起来您正在使用 PHP 的 PDO。在这种情况下,请查看文档。

      如果数据库服务器成功准备语句,PDO::prepare() 返回一个 PDOStatement 对象。如果数据库服务器无法成功准备语句,则 PDO::prepare() 返回 FALSE 或发出 PDOException(取决于错误处理)。

      另外,什么是“sisssssss”? 需要 10 个值,然后插入 11。

      嗯,改一下这个查询:

      $sql = "INSERT INTO `firmen` (`Firma`, `Ansprechpartner`, `Abteilung`, `Strasse`, `PLZ`, `Ort`, `Telefon`, `Email`, `Website`, `Zusatzinfos`) 
      VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
      

      进入这个:

      $sql = "INSERT INTO firmen ('Firma', 'Ansprechpartner', 'Abteilung', 'Strasse', 'PLZ', 'Ort', 'Telefon', 'Email', 'Website', 'Zusatzinfos') 
      VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
      

      这个'和`不一样。

      【讨论】:

      • 我已经使用了“var_dump”,它返回了“bool(false)”,我还将值的数量从11更改为10,但它似乎没有改变任何东西,仍然收到消息
      • 您是否已经回复了您的查询?似乎它无法准备查询,所以它会返回 false。所以那里出了点问题。
      【解决方案5】:

      您的错误在以下代码中

      $sql = "INSERT INTO firmen (Firma, Ansprechpartner, Abteilung, Strasse, PLZ, Ort, Telefon, Email, @98764 987654331@)

      从每个 as 中删除撇号 ('')

      $sql = "INSERT INTO Firmen (Firma, Ansprechpartner, Abteilung, Strasse, PLZ, Ort, Telefon, Email, Website, Zusatzinfos)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-19
        • 1970-01-01
        • 2015-10-22
        • 1970-01-01
        • 2014-02-03
        • 1970-01-01
        • 2015-11-05
        • 2014-06-19
        相关资源
        最近更新 更多