函数不起作用:PHP 致命错误:在布尔值上调用成员函数 bind_param()

Posted

技术标签:

【中文标题】函数不起作用:PHP 致命错误:在布尔值上调用成员函数 bind_param()【英文标题】:Function not working: PHP Fatal error: Call to a member function bind_param() on boolean 【发布时间】:2017-01-14 08:05:25 【问题描述】:

这是我的功能,我在这里坐了好久,试图找出什么不起作用,它说它在 $stmt2->bind_param:

function addDailyTickets() 
    global $mysqli,$db_table_prefix;

    $stmt = $mysqli->prepare("SELECT 
        id
        FROM ".$db_table_prefix."users 
        WHERE active=1
        ");

    $stmt->execute();
    $stmt->bind_result($id);

    while ($stmt->fetch())
        $created_timestamp = time();
        $status = "active";
        $transaction_id = "daily_".date('n-j-Y');
        $game_id = 0;
        $ticket_uniqID = uniqid("tick_");

        $stmt2 = $mysqli->prepare("INSERT INTO ".$db_table_prefix."tickets (
        user_id,
        created_timestamp,
        status,
        transaction_id,
        game_id,
        ticket_uniqID
        )
        VALUES (
        ?,
        ?,
        ?,
        ?,
        ?,
        ?
        )");
        $stmt2->bind_param("iissis", $id, $created_timestamp, $status, $transaction_id, $game_id, $ticket_uniqID);
        $stmt2->execute();
    
    $stmt->close();
    $stmt2->close();    

如果我放一个 $stmt2->error_list;就在 $stmt2->bind_param 之前,它没有错误地返回。

phpMyAdmin:

【问题讨论】:

$mysqli->prepare fails,因此你得到一个 bool(false) 作为返回,跟随错误。 始终检查错误,不要以为它会正常工作! 就像我在帖子开头所说的那样,我检查了一个错误,它没有返回任何内容。 试试var_dump(mysqli_error($mysqli)); 事实上$stmt2->error_list返回另一个错误,因为$stmt2不是一个对象而是一个布尔值,因此你永远不会看到mysqli错误。 我把它改成了这个:pastebin.com/sdB19CVB 并称它为:$myret = addDailyTickets(); var_dump($myret); 仍然一无所获。 【参考方案1】:

好的,感谢@Charlotte Dunois,我想通了,我必须将第一个 mysql 调用放在一个数组中,然后关闭它,然后调用第二个:

function addDailyTickets() 
    global $mysqli,$db_table_prefix;

    $stmt = $mysqli->prepare("SELECT 
        id
        FROM ".$db_table_prefix."users 
        WHERE active=1
        ");

    $stmt->execute();
    $stmt->bind_result($id);
    while ($stmt->fetch())
        $row[] = $id;
    
    $stmt->close();

    foreach($row as $id)
        $created_timestamp = time();
        $status = "active";
        $transaction_id = "daily_".date('n-j-Y');
        $game_id = 0;
        $ticket_uniqID = uniqid("tick_");

        $stmt2 = $mysqli->prepare("INSERT INTO ".$db_table_prefix."tickets (
        user_id,
        created_timestamp,
        status,
        transaction_id,
        game_id,
        ticket_uniqID
        )
        VALUES (
        ?,
        ?,
        ?,
        ?,
        ?,
        ?
        )");
        $stmt2->bind_param("iissis", $id, $created_timestamp, $status, $transaction_id, $game_id, $ticket_uniqID);
        $stmt2->execute();
    
    $stmt2->close();

【讨论】:

以上是关于函数不起作用:PHP 致命错误:在布尔值上调用成员函数 bind_param()的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter 致命错误:在布尔值上调用成员函数 result()

Codeigniter - 在布尔值上调用成员函数 result_array() - 本地设置安装错误

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

在 [重复] 中调用布尔值上的成员函数 execute()

在布尔值上调用成员函数 attach() - Laravel

调用函数有时不起作用