2015-10-28 59 views
0

代码致命错误:调用布尔成员函数bind_param()在

if(isset($_POST['create'])){ 
    $fname  = trim($_POST['fname']); 
    $lname  = trim($_POST['lname']); 
    $ftname   = trim($_POST['ftname']); 
    $mtname   = trim($_POST['mtname']); 
    $date_of_admission = trim($_POST['date_of_admission']); 
    $date_of_birth = trim($_POST['date_of_birth']); 
    $photo_location   = trim($_POST['photo_location']); 
    $address  = trim($_POST['address']); 
    $phone  = trim($_POST['phone']); 
    $sex = trim($_POST['sex']); 
    $nationality = trim($_POST['nationality']); 
    $religion = trim($_POST['religion']); 

    if(empty($fname) && empty($lname) &&empty($ftname) &&empty($mtname) &&empty($date_of_admission) && empty($phone) && empty($sex)){ 
     $error = "You must fill all fields."; 
    }else{ 
     $insert = $db->prepare("INSERT INTO st_info (fname, lname, ftname, mtname, date_of_birth, date_of_admission, photo_location, address, phone, sex, nationality, religion,joined) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW())"); 
     $insert->bind_param('sssssssssddd',$fname,$lname,$ftname,$mtname,$date_of_birth,$date_of_admission,$photo_location,$address,$phone,$sex,$nationality,$religion); 
     if($insert->execute()){ 
      //$success = "st_info added successfully!"; 
      header("location:index.php"); 
     } 
    } 
} 

错误

Fatal error: Call to a member function bind_param() on boolean in C:\xampp\htdocs\create.php on line 26

+0

不相关的问题,但你如果检查是错误的。为了检查是否所有字段都已填充,请使用or运算符('||')代替。现在你已经设置了它的方式,如果某些东西不是空的,那么之后的所有东西都不会再被检查。如果没有填充任何内容,此代码现在只会引发错误,但一旦填充了一个字段,它就不会再抱怨了。 – Oldskool

回答

0

貌似$ DB->准备()返回一个布尔值和不是一个对象。试试这可能吗?

if(isset($_POST['create'])){ 
    $fname  = trim($_POST['fname']); 
    $lname  = trim($_POST['lname']); 
    $ftname   = trim($_POST['ftname']); 
    $mtname   = trim($_POST['mtname']); 
    $date_of_admission = trim($_POST['date_of_admission']); 
    $date_of_birth = trim($_POST['date_of_birth']); 
    $photo_location   = trim($_POST['photo_location']); 
    $address  = trim($_POST['address']); 
    $phone  = trim($_POST['phone']); 
    $sex = trim($_POST['sex']); 
    $nationality = trim($_POST['nationality']); 
    $religion = trim($_POST['religion']); 


    if(empty($fname) && empty($lname) &&empty($ftname) &&empty($mtname) &&empty($date_of_admission) && empty($phone) && empty($sex)){ 
     $error = "You must fill all fields."; 
    }else{ 
     $db->prepare("INSERT INTO st_info (fname, lname, ftname, mtname, date_of_birth, date_of_admission, photo_location, address, phone, sex, nationality, religion,joined) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW())"); 
     $db->bind_param('sssssssssddd',$fname,$lname,$ftname,$mtname,$date_of_birth,$date_of_admission,$photo_location,$address,$phone,$sex,$nationality,$religion); 
     if($db->execute()){ 
      //$success = "st_info added successfully!"; 
      header("location:index.php"); 
     } 

    } 
} 
0

看来你准备语句失败(否则它会返回一个PDOStatement对象,而不是一个布尔值)

您应该使用$db->errorInfo()$db->errorCode()得到您的错误的原因。

原因可能是,您的声明中有一些字段不存在,或者您将其命名为错误。

0

在准备好的发言最常见的故障之一是连接编码..尝试

$mysqli->set_charset("utf8"); 

$mysqli = new mysqli("host", "user", "pass", "db"); 
相关问题