当前位置: 首页 > 知识库问答 >
问题:

致命错误:调用一个成员函数准备()在布尔值

郗欣嘉
2023-03-14

我问了几个问题,但没有人帮忙。
致命错误:在中的布尔值上调用成员函数bind_param()-

我在PDO中使用PHP5和mySql:

连接和选择工作正常,但插入不想工作
这就是我的功能:

function AddNewUser($nickname, $email)
{
    ini_set('display_errors', 1); //DELETE ME
    ini_set('expose_php', 1); //DELETE ME

    $pdo = EstablishDBCon();
    echo "Subscribe user..<br/>";

    $sql = "INSERT INTO db.table (nickname, email, insertdate, updatedate) VALUES (:nickname, :email, :insertdate, :updatedate)";

    try {
        $stmt = $pdo->prepare($sql); //Error at this line
        //id?
        $stmt->bindParam(':nickname', $nickname, PDO::PARAM_STR);
        $stmt->bindParam(':email', $email, PDO::PARAM_STR);
        $stmt->bindParam(':insertdate', date("Y-m-d H:i:s"), PDO::PARAM_STR);
        $stmt->bindParam(':updatedate', null, PDO::PARAM_NULL);
        $stmt->exeute();

        CloseDBCon($pdo);
        echo "Subscribed!<br/>";
    } catch (PDOException $e) {
        echo 'Connection failed: ' . $e->getMessage();
    }
}

数据库模式是:
id(int not null auto_inc)|昵称(varchar not null)|电子邮件(varchar not null)| insertdate(datetime)| updatedatedate(datetime)

我是新来的PHP,我不明白这种类型的错误。我标记了代码中抛出错误的一行:

$stmt = $pdo->prepare($sql); //Error at this line

有人能帮我吗?

提前谢谢!

//编辑:Connection aka db_Connection.php:

<?php
echo 'Establishing MySQL Connection<br/>';

$pdo = null;
$dsn = 'mysql: host=xx; dbname=xx';
$dbUser = 'xx';
$pw = 'xx';

try {
    $pdo = new PDO($dsn, $dbUser, $pw);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo 'Connection established.<br/>';
}
catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

return $pdo;
?>

以下是已建立的DBCON函数:

function EstablishDBCon()
{
    $pdo = include_once 'db_connection.php';
    return $pdo;
}

共有3个答案

鲜于意
2023-03-14

问题出在函数buildedbcon()中,该函数要求include\u once语句返回一个值,就像包含的文件的内容是函数一样。

function EstablishDBCon()
{
    $pdo = include_once 'db_connection.php';
    return $pdo;
}

但这不是include_once的工作方式:

如果文件中的代码已经包含,则不会再次包含,并且include\u once返回TRUE

这就是为什么在$pdo变量中使用TRUE(布尔值)的原因。

在任何情况下,这种构造都会使代码很难遵循。我建议只使用include和friends将自包含的PHP函数组合在一起,或者将HTML页面的一部分嵌入到另一个页面中。

周阳成
2023-03-14

调用boolean上的成员函数在本例中,表示$pdo不是对象,而是布尔值。因此,与数据库资源相反,buildedbcon()很可能在成功时返回true,否则返回false。再次检查该功能上的文档。这里有一个链接,指向您需要的一些关于PDO的相关文档。

司徒寒
2023-03-14

重用函数的最佳方法是将其放在include文件中,然后将其包含在您需要的每个文件的顶部。因此,在db_connection.php中,创建函数:

function EstablishDBCon()
{
    $pdo = false;
    try{ 
         // Put your PDO creation here
    } catch (Exception $e) {
        // Logging here is a good idea
    }
    return $pdo;

}

现在,您可以在任何需要的地方使用该功能。确保始终确保$pdo!==false在使用它之前,请确保您的连接没有失败。

 类似资料: