title: php update query using prepared statement not working
body: <p>I am doing updation of table using following prepared statements as follows:</p>
  
  <pre><code> $query = " UPDATE signup SET name=?,password=?,verify_key=? WHERE email=? ";
   $stmt=$conn-&gt;prepare($query);
   $stmt-&gt;bind_param("ssss",$dname,$password,$verify_key,$email);
   $stmt-&gt;execute();
   $stmt-&gt;close();
  </code></pre>
  
  <p>But it is giving error on which I am stuck for long time:</p>
  
  <blockquote>
    <p>Fatal error: Call to a member function bind_param() on boolean in somefile.php on line 75</p>
  </blockquote>
  
  <p>Structure of table in database is as follow:</p>
  
  <pre><code>mysql&gt; desc signup;
  +------------+--------------+------+-----+---------+----------------+
  | Field      | Type         | Null | Key | Default | Extra          |
  +------------+--------------+------+-----+---------+----------------+
  | sid        | int(11)      | NO   | PRI | NULL    | auto_increment |
  | name       | varchar(100) | NO   |     | NULL    |                |
  | email      | varchar(100) | NO   | UNI | NULL    |                |
  | password   | varchar(255) | NO   |     | NULL    |                |
  | verify_key | varchar(255) | NO   |     | NULL    |                |
  | active     | bit(1)       | NO   |     | NULL    |                |
  +------------+--------------+------+-----+---------+----------------+
  6 rows in set (0.00 sec)
  </code></pre>
  
  <p><strong>Note :</strong> I printed $dname,$password,$verify_key,$email. All printed correct string values.</p>
  
  <p>Entire PHP code: </p>
  
  <pre><code>&lt;?php
  session_start();
  ob_start();
  require_once("connection.php");
  
  $dname=$_POST['dname'];
  $email=$_POST['email'];
  $password=$_POST['password'];
  
  if(empty($dname) || empty($email) || empty($password))
    die("Enter correct details.");
  
  $password = password_hash($password,PASSWORD_DEFAULT); // generate hash for password
  $verify_key = password_hash(RandomString(),PASSWORD_DEFAULT); // generate hash for verification key
  
  /* RandomString() generates random string */
  function RandomString($length = 32) {
        $randstr;
        //our array add all letters and numbers if you wish
        $chars = array(
            'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'p',
            'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5',
            '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K',
            'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');
        for ($rand = 0; $rand &lt;= $length; $rand++) {
            $random = rand(0, count($chars) - 1);
            $randstr .= $chars[$random];
        }
        return $randstr;
  }  // function RandomString()  over
  
  /*  Mail Sending Code */
  function sendMail($email,$verify_key){
  $to = $email;
  $subject = 'Something';
  $mail_link='https://127.0.0.1/rs/signupCheck.php?email='.$email.'&amp;key='.$verify_key;
  $message = "
  &lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
  &lt;p&gt;
  &lt;a href='&gt; Click this link to verify your account &lt;/a&gt;
  &lt;/p&gt;
  &lt;/body&gt;
  &lt;/html&gt;
  ";
  
  // To send HTML mail, the Content-type header must be set
  $headers[] = 'MIME-Version: 1.0';
  $headers[] = 'Content-type: text/html; charset=iso-8859-1';
  $headers[] = 'From: Something &lt;Something&gt;';
  $res = mail($to, $subject, $message, implode("\r\n", $headers));
  return $res;  //check officially mail is sent or not
  }  // function sendMain() ends
  
  
  // check if email already exists in database
  $query = " SELECT active FROM signup WHERE email=?";
  $stmt = $conn-&gt;prepare($query);
  $stmt-&gt;bind_param("s",$email);
  $stmt-&gt;execute();
  $stmt-&gt;bind_result($dbactive);
  if($stmt-&gt;fetch()){     // email is present in DB
  if($dbactive==1){        // status=1
    $stmt-&gt;close();
    die("Account already created. Try forget passwod if you can't access it.");
  }
  else{
    /* Record is already present with status=0 , override all the details */
    if(sendMail($email,$verify_key)) {  // send mail first then update DB
       $query = " UPDATE `signup` SET `name`=?,`password`=?,`verify_key`=? WHERE `email`=? ";
       $stmt=$conn-&gt;prepare($query);
       $stmt-&gt;bind_param("ssss",$dname,$password,$verify_key,$email);
       $stmt-&gt;execute();
       $stmt-&gt;close();
       die("We sent you verification link on mail. Click it to verify !!!");
    }
    else {
      die("Mail sending failed. Try again !!!");
    }
  }
  }      // email already present with either status=1 or status=0
  else { // Insert account details in DB , nothing is present in DB for user
       if(sendMail($email,$verify_key)) {  // send mail first then update DB
         $query = "INSERT INTO signup (sid,name,email,password,verify_key,active)VALUES(?,?,?,?,?,?)";
         $stmt = $conn-&gt;prepare($query);
         $stmt-&gt;bind_param("issssi",$fixed_sid='',$dname,$email,$password,$verify_key,$fixed_active=0);
          /* Notice $fixed_sid and $fixed_active , it is needed
             you can't have fixed values in bind_param
          */
         $stmt-&gt;execute();
         $stmt-&gt;close();
         die("We sent you verification link on mail. Click it to verify !!!");
       }
       else {
         die("Mail sending failed. Try again !!!");
       }
  }    // first time data entry in DB
  ?&gt;
  </code></pre>