我有这个错误:
在非对象上调用成员函数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();
?>
答案 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...