PHP致命错误:调用成员函数bind_param()

时间:2015-08-13 04:58:31

标签: php fatal-error

我一直坚持这个错误,请帮帮我这是我的代码 PHP致命错误:调用成员函数bind_param()

$statement= $db->prepare("insert into uploaddetails(idnum,title,desc,author,tags,title) values(?,?,?,?,?,?)");


     $id='NULL';
    $title=$_POST['title'];
    $description=$_POST['description'];
     $author=$_POST['author'];
     $tags=$_POST['tags'];
     $file= basename($_FILES["fileToUpload"]["name"]);


    $statement->bind_param( 'isssss', $id,$title, $description,$author,$tags,$file);
    $statement->execute();

    $db->close();
    $statement->close();

4 个答案:

答案 0 :(得分:2)

由于没有其他人发现过这个问题,我会为你发布。您prepare()失败的原因是您尝试使用MySQL Reserved Word。单词desc是MYSQL中的保留字,这意味着你需要将它包装在backticks中,如下所示:

$statement= $db->prepare("insert into uploaddetails(idnum,title,`desc`,author,tags,file) values(?,?,?,?,?,?)");

在插入数据库/使用预准备语句时,使用正确的做法也很有帮助。

$statement= $db->prepare("insert into uploaddetails(idnum,title,`desc`,author,tags,title) values(?,?,?,?,?,?)");

if($statement !== FALSE) {
    // do the binds...etc
}

注释

file也是一个保留字,我不知道你的实际文件列名是什么,所以请记住这一点。

答案 1 :(得分:0)

由于查询,您的prepare语句失败,您需要做的是确保语句不是false才能执行bind_param,否则请按如下方式查看prepare查询错误:

//Make sure the statement is not false
if($statement !== FALSE)
{
    $statement->bind_param( 'isssss', $id,$title, $description,$author,$tags,$file);
    $statement->execute();

    $db->close();
    $statement->close();
}
//Otherwise check why the prepare statement failed
else
{
    die('prepare() failed: ' . htmlspecialchars($db->error));

}

答案 2 :(得分:0)

  • 试试这个。你的代码被修改了。
$statement= $db->prepare("INSERT INTO uploaddetails (title,desc,author,tags,file) VALUES(?,?,?,?,?)");


 //$id='NULL';
$title=$_POST['title'];
$description=$_POST['description'];
 $author=$_POST['author'];
 $tags=$_POST['tags'];
 $file= $_FILES["fileToUpload"]["name"];


$statement->bind_param( 'isssss',$title, $description,$author,$tags,$file);
$statement->execute();

$db->close();
$statement->close();
     

// ----将文件移动到所需位置......

-ID不是必需的,因为它是自动增量的,mysql会处理它, - 你有错误的文件名字段,这是标题,我将其更改为文件(如果你有任何其他名称,请更正)。

答案 3 :(得分:0)

可能的错误:

1)表格中的列数与您的查询不同。 2)虽然在 bind_param 行显示了错误,但错误可能发生在准备语句行(在您的情况下是第一行)。 3)您可以在这些行之前和之后放置 echo 语句并捕获错误(在我的案例中,我在准备语句中重复了相同的字段名称两次)。

根据您的要求获取下面的代码并进行测试:

$stmt = $conn->prepare("INSERT INTO SalesReturn(CRDNUMBER, CRDDATE, REFERENCE,CUSTOMER,ITEM,QTYRETURN,UNITPRICE,TIAMOUNT1,TIAMOUNT2,EXTCRDMISC,TAMOUNT1,TAMOUNT2,CRDSUBTOT,CRDNET,CRDETAXTOT,CRDNETNOTX,CRDNETWTX,TransactionType) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); echo "after prepare"; $stmt->bind_param("ssssssssssssssssss",$CRDNUMBER,$CRDDATE,$REFERENCE,$CUSTOMER,$ITEM,$QTYRETURN,$UNITPRICE,$TIAMOUNT1,$TIAMOUNT2,$EXTCRDMISC,$TAMOUNT1,$TAMOUNT2,$CRDSUBTOT,$CRDNET,$CRDETAXTOT,$CRDNETNOTX,$CRDNETWTX,$TransactionType); echo "after bind_param statement";