我在下面的代码中收到以下错误。
警告:mysqli_stmt :: bind_param():变量数量与第39行C:\ wamp \ www \ purev \ admin \ edit.php中预准备语句中的参数数量不匹配
if(isset($_POST['submit'])){
$post_title = $_POST['posttitle'];
$content = $_POST['content'];
$author_name = $_POST['authorname'];
$category = $_POST['category'];
$post_date = $_POST['postdate'];
if(isset($_FILES['image']['name']) && ($_FILES['image']['name'] !="")){
$size=$_FILES['image']['size'];
$temp=$_FILES['image']['tmp_name'];
$type=$_FILES['image']['type'];
$image_name=$_FILES['image']['name'];
unlink("../images/"."$image_name");
move_uploaded_file($temp,"../images/$image_name");
}
//-------------------UPDATE POST------------------------
$sql =
"UPDATE blog_posts
SET post_title='$post_title',
content='$content',
author_name='$author_name',
category='$category',
post_date='$post_date',
image='$image_name'
WHERE post_id='$id'";
$stmt = $con->prepare($sql);
$stmt->bind_param("sssssii", $post_title, $content, $author_name, $category, $image_name, $post_date, $id);
$stmt->execute();
不使用预准备语句查询有效。你有任何想法如何解决这个问题吗?
答案 0 :(得分:2)
评论中说过,你错过了占位符。
所以,改变:
$sql =
"UPDATE blog_posts
SET post_title='$post_title',
content='$content',
author_name='$author_name',
category='$category',
post_date='$post_date',
image='$image_name'
WHERE post_id='$id'";
为:
$sql =
"UPDATE blog_posts
SET post_title=?,
content=?,
author_name=?,
category=?,
post_date=?,
image=?
WHERE post_id=?";
就这么简单。
本手册包含正确的语法:
不要忘记以正确的顺序传递参数。它们应该以与查询中使用的顺序相同的顺序传递(您将图像与发布日期交换),因此它应该是:
$stmt->bind_param("ssssisi", $post_title, $content, $author_name, $category, $post_date, $image_name, $id);