【问题标题】:Fatal error: Uncaught Error: Call to a member function bind_param() on bool in [duplicate]致命错误:未捕获的错误:在 [重复] 中调用 bool 上的成员函数 bind_param()
【发布时间】:2020-11-03 09:07:45
【问题描述】:

我附上了我的 php 代码的 sn-p。我收到此错误,我已尝试通过查找查询返回 false 的原因来对其进行调试。


<html>
<body>
<form action="index.php" method="post" >
<table style="width: 100%;">
<tr>
<td width="10%">Advisor name </td>
<td width="10%"> <input type="text" name="advisor" id="advisor" ></td>
<td width="10%">&nbsp;</td>
<td width="10%">&nbsp;</td>
<td>&nbsp;</td>
 </tr>
<tr>
<td>Student name</td>
<td> <input type="text" name="sname" id="sname" ></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>Student ID</td>
 <td> <input type="text" name="studentid" id="studentid" ></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
 <td>&nbsp;</td>
</tr>
<tr>
 <td>Class Code </td>
 <td> <input type="text" name="classcode" id="classcode" ></td>
 <td>&nbsp;</td>
 <td>Search Advisor</td>
  <td> <input type="text" name="searchAdv" id="searchAdv" ></td>
 </tr>
 <tr>
  <td>&nbsp;</td>
      <td> <input type="submit" name="button1" value="Save" style="width: 93px" /></td>
      <td>&nbsp;</td>
 <td>&nbsp;</td>
     <td>
   <input type="submit" name="button2" value="Search" /></td>
     </tr>
      <tr>
       <td>&nbsp;</td>
        <td>&nbsp;</td>
    <td>&nbsp;</td>
       <td>&nbsp;</td>
        <td>&nbsp;</td>
        </tr>
        </table>
       </form>
          <hr>
        <h2> Result </h2>

         <?php

      if(array_key_exists('button1', $_POST))
      {
     DataSave(); /* IF CLICKED OF SAVED BUTTON */

      }
      else if(array_key_exists('button2', $_POST))
      {
      DataRetreive(); /* IF CLICKED OF SEARCH BUTTON */
            }

      function DataSave() /* FUNCTION START */
      {
       $dbhost = 'localhost:3306';
       $dbuser = 'root';
       $dbpass = '';
       $dbname = 'mysql';
       $conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname);

       if(! $conn ){
       die('Could not connect: ' . mysqli_error());
       }

       if(isset($_POST["button1"])) /* IF CLICKED OF SAVED BUTTON */
       {
           $Advisor = $_POST['advisor'];
           $StudentName = $_POST['sname'];
           $Studentid = $_POST['studentid'];
           $ClassCode = $_POST['classcode'];

           /* USED PREAPRE STATMENT TO AVOID SQL INJECTION */
           $stmt = $conn->prepare("INSERT INTO datas(Advisor,Sname,Studentid,ClassCode) VALUES 
         (?,?,?,?) ");
           $stmt->bind_param("ssss", $Advisor, $StudentName, $Studentid,$ClassCode );


           $stmt->execute();
           $stmt->close();


       }
        $conn->close();

      } /* FUNCTION END */

      function DataRetreive() /* FUNCTION START */
            {

        $dbhost = 'localhost:3306';
       $dbuser = 'root';
        $dbpass = '';
       $dbname = 'mysql';
            $conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname);

             if(isset($_POST["button2"])) /* IF CLICKED OF SEARCH BUTTON */
      {
       $searchAdv = $_POST['searchAdv']; /* RETRIEVE FROM POST DATA*/

       if(! $conn )
       {
           die('Could not connect: ' . mysqli_error());
       }

       /* USED PREAPRE STATMENT TO AVOID SQL INJECTION */

       $stmt = $conn->prepare("SELECT * FROM datas where Advisor like ? ");
       $stmt->bind_param("s", $searchAdv);

       $stmt->execute();
       $stmt->bind_result($Advisor , $StudentName,$Studentid,$ClassCode);

       /* fetch values */
       while ($stmt->fetch()) {
                   echo " Advisor : " . $Advisor. " , Student Name : " . $StudentName. " , StudentId 
          : " . $Studentid. ",
                   Class Code : " . $ClassCode. " <br>";

       }

       $stmt->close();
       }
          mysqli_close($conn);

       } /* FUNCTION END */

         ?>
        </body>
        </html>

【问题讨论】:

  • 另外,请不要使用不相关的标签。如果抛出 PHP 错误,则问题与 HTML 或 jQuery 无关

标签: php mysqli


【解决方案1】:
$stmt = $conn->prepare("INSERT INTO datas(Advisor,Sname,Studentid,ClassCode) VALUES 
         (?,?,?,?) ");
           $stmt->bind_param("ssss", $Advisor, $StudentName, $Studentid,$ClassCode );

我不确定,但我认为您在“插入”中有 4 列,但您尝试绑定 5 个值。列数必须与值相同

【讨论】:

  • 根据@Jay Blanchard answer的说法,很可能是因为查询有问题,所以他需要检查prepare的真假
  • @BurhanKashour 他们不需要检查。如果他们启用错误报告,那么他们将看到所有错误
  • 或者直接使用try { } catch (\ErrorException $th) { }声明
猜你喜欢
  • 2022-01-21
  • 2020-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-02
  • 1970-01-01
  • 2018-09-10
  • 1970-01-01
相关资源
最近更新 更多