致命错误:未捕获错误:在bool中调用成员函数bind_param()

时间:2020-11-03 09:07:45

标签: php mysqli

我附上了我的PHP代码片段。我收到此错误,并尝试通过查找查询返回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>

1 个答案:

答案 0 :(得分:-2)

$stmt = $conn->prepare("INSERT INTO datas(Advisor,Sname,Studentid,ClassCode) VALUES 
         (?,?,?,?) ");
           $stmt->bind_param("ssss", $Advisor, $StudentName, $Studentid,$ClassCode );

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