PHP bind_param在MySQli中不起作用

时间:2016-04-03 15:15:56

标签: php mysqli

我有这个错误:

  

在非对象上调用成员函数bind_param()   在第15行的/home/ccraft50/public_html/C-Blog/InsertDataPosts.php中

   <?php
$servername2 = "localhost";
$username2 = "My DB";
$password2 = "My Pass";
$dbname2 = "My DB";
// Create connection
$dbconn2 = new mysqli($servername2, $username2, $password2, $dbname2);
// Check connection
if ($dbconn2->connect_error) {
    die("Connection failed: " . $dbconn2->connect_error);
 } 
$insIndexData = $dbconn2->prepare("INSERT INTO " . str_replace(str_split('\\/:*?"<>|.$+-%#@!~&;\',=~` '), "_", $_POST['filename']) . "_Index (SubjectName, IndexData) VALUES (?, ?)");

$str_prot_index = array('<script>', '</script>', '<?php', '?>', '<html', '</html>', '<body', '</body>', '<head', '</head>', '<pre', '</pre>', '<div', '</div>');
$insIndexData->bind_param('ss', $_POST['filename'], str_replace($str_prot_index, '', $_POST['comment']));
$insIndexData->execute();
$insIndexData->close();

if($dbconn2->prepare($insIndexData)) {
        echo "Successfuly Insert data for index!";
} else {
    echo "Error: " . $dbconn2->error;
}

$dbconn2->close();
?>

2 个答案:

答案 0 :(得分:3)

您正在以错误的方式使用数据库。

数据库必须由表组成,每个表包含多个行。虽然您显然希望为每个文件创建一个不同的表。相反,您必须将所有文件存储在单个表中,将文件名添加为字段,而不是表名。

$stmt = $dbconn2->prepare("INSERT INTO files (SubjectName, IndexData) VALUES (?, ?)");
$stmt->bind_param('ss', $_POST['filename'], $_POST['comment']);
$stmt->execute();
echo "Successfuly Insert data for index!";

请注意,第二次准备相同查询的代码的第二部分没有意义。要测试插入是否成功,您必须在 new mysqli(之前添加此行

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

如果插入失败,它将抛出错误。

答案 1 :(得分:-1)

你的准备工作失败了。尝试添加一些测试以确保其准备正确。在你->prepare

之后
if($insIndexData !== false)
{
    etc...