PHP bind_param没有';我不在MySQli工作


PHP bind_param doesn't work in MySQli

我有这个错误:

对非对象的成员函数bind_param()的调用在第15行上的/home/ccraft50/public_html/C-Blog/InserDataPosts.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();
?>

您使用数据库的方式不对。

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

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

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

您的准备工作失败。尝试添加一些测试以确保其准备正确。->prepare 之后

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