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 Word。 desc
这个词是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 语句之后";
我一直卡在这个错误上,请帮助我这是我的代码 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 Word。 desc
这个词是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 语句之后";