FATAL ERROR: Uncaught Error: Call to a member function execute() on boolean in

FATAL ERROR: Uncaught Error: Call to a member function execute() on boolean in

我知道有几个话题在讨论这个,但不幸的是我无法让它为我工作。我可能正在监督一些事情。

我得到以下代码:

function get_kurs($block){
    open_connection();
    global $conn;

    $stmt = $conn->prepare("SELECT FachKürzel FROM `Fach` LEFT JOIN `Stunde` ON Fach.Fachname = Stunde.Fachname WHERE Stunde.Stunde = ?");
    $stmt->bind_param("s", $block);
    $stmt->execute();
    $stmt->bind_result($kuerzel);
    $stmt->fetch();

    print $kuerzel;

    $stmt->close();
    $conn->close();
}

当我尝试执行它时,它给了我所描述的错误。我认为这可能与查询有关,但 运行 同一数据库上的 HeidiSQL 中完全相同的查询给了我想要的结果。

连接正常,因为我可以获得简单的查询以在我的网站上显示结果。

有什么想法吗? 提前致谢!

编辑:以防万一它很重要:

function open_connection(){
    $servername = "XXX.XXX.XXX.XXX";
    $username = "username";
    $password = "password";
    $dbname = "XXXX";

    global $conn;
    $conn = new MySQLi($servername, $username, $password, $dbname);

    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }
}

prepare函数可以return语句对象或false。如果你得到一个错误,这意味着有一个错误。

尝试使用 $conn->errno$conn->error 打印错误,以便更好地了解您的问题所在。

您可以将代码更改为如下内容:

function get_kurs($block){
    open_connection();
    global $conn;

    if($stmt = $conn->prepare("SELECT FachKürzel FROM `Fach` LEFT JOIN `Stunde` ON Fach.Fachname = Stunde.Fachname WHERE Stunde.Stunde = ?")){
        $stmt->bind_param("s", $block);
        $stmt->execute();
        $stmt->bind_result($kuerzel);
        $stmt->fetch();
    }else{
        printf('errno: %d, error: %s', $conn->errno, $conn->error);
        die;
    }

    print $kuerzel;

    $stmt->close();
    $conn->close();
}