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

PHP-致命错误:调用成员函数bind_param()[重复]

诸葛煜
2023-03-14

在这个MySQL查询中,我一直在发牢骚。

假设我有这个:

    $add = "INSERT INTO books (title) VALUES(?)";
    if ($stmt = $mysqli->prepare($add)) {

        $arr = array($title);

        foreach ($arr as $value) {
            echo var_dump($value);
        }

        $stmt->bind_param("s", $title);

有了那个Foreach-

string 'Medieval Times (History)' (length=24)
int 1422843281
int 1420844341
string '127.0.0.1' (length=9)
string 'MY_EMAIL@gmail.com' (length=22)
string '' (length=0)
int 1420844805
int 6
int 3
int 1
int 0
int 0
int 1
int 1
int 1
int 1

当它碰到这条线时就会停止,我得到了这个错误:

致命错误:在第386行的C:\wamp\www\book\dashboard.php中调用非对象上的成员函数bind_param()

第386行:$stmt-

所以,我知道我正在导入16个变量。。。我得到这个错误。啊。


共有3个答案

马祺
2023-03-14

编辑:试试这个

if ($stmt = $mysqli->prepare($add)) {

    $stmt->bind_param($arr);
}
else {
    printf("Errormessage: %s\n", $mysqli->error);
}

http://php.net/manual/en/mysqli-stmt.bind-param.php

冉昊
2023-03-14

尝试以下方法

$stmt->bind_param(array("siisssiiiiiiiiii", $title, $edited, $created, $ip, $email_to, $twitter, $last_taken, $questions_total, $responses, $show_progress, $need_correct, $go_back, $state, $send_stats, $show_number, $importedVal));
汪才英
2023-03-14

您的查询无法prepare()。你需要弄清楚在哪里,如何以及为什么。查看此答案的最后一个代码块,让我们知道错误是什么。

我将从查询开始。您正试图访问MySQL保留字 Source(请参阅#684)。你需要像这样用背勾包裹它们:

$add = "INSERT INTO books (title, edited, created, ip,".
    " email_to, twitter, last_taken, questions_total, responses, ".
    "show_progress, need_correct, go_back, state, send_stats, ".
    "show_number, imported) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ".
    "?, ?, ?, ?, ?, ?, ?)";

现在,您正在if块中实例化变量$stmt,然后尝试将其绑定到该块之外。您需要更改以下内容:

if ($stmt = $mysqli->prepare($add)) {
....
}
$stmt->bind_param(....);

为此:

if ($stmt = $mysqli->prepare($add)) {
....
$stmt->bind_param(....);
}

此外,请确保您的查询实际准备正确:

if ($stmt = $mysqli->prepare($add)) {

    $stmt->bind_param("siisssiiiiiiiiii", $title, $edited, $created, $ip, $email_to, $twitter, $last_taken, $questions_total, $responses, $show_progress, $need_correct, $go_back, $state, $send_stats, $show_number, $importedVal);

    // execute it and all...
} else {
    die("Errormessage: ". $mysqli->error);
}

然后让我们知道发生了什么。

 类似资料: