PHP Fatal error: Call to a member function bind_param()

PHP Fatal error: Call to a member function bind_param()

我一直卡在这个错误上,请帮助我这是我的代码 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();

你的prepare statement因为查询而失败,你需要做的是确保语句不为false才能执行bind_param,否则查看prepare query错误如下:

//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));

}
  • 试试这个。您的代码已修改。
$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();

//---- Move the file to desired location...

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

由于没有其他人发现该问题,我将 post 为您解决。您 prepare() 失败的原因是您尝试使用 MySQL Reserved Worddesc这个词是MYSQL中的保留字,这意味着你需要把它包在backticks中,像这样:

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

在插入 database/using 准备好的语句时,使用正确的练习也很有帮助。

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

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

备注

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

可能的错误

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

根据您的要求获取以下代码并试用

$stmt = $conn->prepare("插入 SalesReturn(CRDNUMBER, CRDDATE, REFERENCE, CUSTOMER, ITEM, QTYRETURN, UNITPRICE, TIAMOUNT1, TIAMOUNT2, EXTCRDMISC, TAMOUNT1, TAMOUNT2, CRDSUBTOT, CRDNET, CRDETAXTOT, CRDNETNOTX ,CRDNETWTX,TransactionType) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); echo "准备后"; $stmt->bind_param("sssssssssssssssss",$CRDNUMBER,$CRDDATE,$REFERENCE,$CUSTOMER,$ITEM,$QTYRETURN,$UNITPRICE,$TIAMOUNT1,$TIAMOUNT2,$EXTCRDMISC,$TAMOUNT1,$TAMOUNT2, $CRDSUBTOT,$CRDNET,$CRDETAXTOT,$CRDNETNOTX,$CRDNETWTX,$TransactionType); echo "在 bind_param 语句之后";