我一直坚持这个错误,请帮帮我这是我的代码 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();
答案 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";