php - 带有准备语句的 Mysql 更新查询给出错误

标签 php mysql mysqli prepared-statement

我在下面的代码中遇到以下错误。

Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement in C:\wamp\www\purev\admin\edit.php on line 39

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

不使用准备好的语句查询工作。您有解决此问题的任何想法吗?

最佳答案

有人在评论中说,你错过了占位符。

所以,改变:

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

关于php - 带有准备语句的 Mysql 更新查询给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48123286/

相关文章:

php - mysql_field_name 到新的 mysqli

javascript - Firefox 对待 ajax 的方式与 Chromium 不同?

php - PHP 和 MYSQL 中格式 DD/MM/YYYY 的字符串到日期的转换不起作用

php - 将表格放入二维数组并显示它

php - 如果第一个查询已插入其数据,我想插入第二个查询的数据

php - mysqli 是否存在限制使其不适合与 AMP 或 ReactPHP 一起使用?

php - 如何实时回显输出(在脚本完成之前)?

php - 使用 Doctrine 和 Symfony 插入数据库 - 外键不插入

php - 空查询验证的更好实践

javascript - 不刷新页面获取单选值