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

时间:2015-10-28 08:57:35

标签: php mysql

代码

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");
        }
    }
}

错误

  

致命错误:在布尔值中调用成员函数bind_param()   第26行的C:\ xampp \ htdocs \ create.php

3 个答案:

答案 0 :(得分:0)

看起来$ db-> prepare()返回一个布尔值而不是一个对象。试试这个吗?

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");
        }

    }
}

答案 1 :(得分:0)

看来你的prepare语句失败了(否则它会返回一个PDOStatement而不是一个布尔值)

您应该使用$db->errorInfo()$db->errorCode()来了解错误原因。

原因可能是,您的陈述中有一些字段,它们不存在,或者您将它们命名为错误。

答案 2 :(得分:0)

准备语句中最常见的失败之一是连接编码..尝试

$mysqli->set_charset("utf8");

$mysqli = new mysqli("host", "user", "pass", "db");