【问题标题】:Function not working: PHP Fatal error: Call to a member function bind_param() on boolean函数不起作用:PHP 致命错误:在布尔值上调用成员函数 bind_param()
【发布时间】: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); 仍然一无所获。

标签: php mysql mysqli


【解决方案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();
}

【讨论】:

    猜你喜欢
    • 2015-02-08
    • 1970-01-01
    • 2015-11-05
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    • 2015-11-04
    相关资源
    最近更新 更多