MYSQL PHP:更新查询导致语法错误


MYSQL PHP : update query results in a syntax error

我正在尝试更新数据库的内容(特别是posts数据库记录之一的post内容)。

下面是我的PHP代码:

$update_sql = "UPDATE wp_posts SET post_content='$new_content' WHERE ID=602";
if (mysqli_query($conn, $update_sql)) {
    echo "Record updated successfully";
} else {
    echo "Error updating record: " . mysqli_error($conn);
}

这就是我得到的:

Error updating record: You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server 
version for the right syntax to use near 'attention�sur 
les plats eux-m�mes, le service est lui aussi tout en 
simplicit' at line 1

我不知道我做错了什么。我只知道$new_content包含一个很长的字符串(一个完整的wordpress帖子的内容,包括各种HTML标记)。

我应该怎么做才能让它接受我的更新查询?

感谢您的帮助

在将字符串插入数据库之前,需要对其进行转义

$update_sql = "UPDATE wp_posts SET post_content='" . mysqli_real_escape_string($new_content) . "' WHERE ID=602";
if (mysqli_query($conn, $update_sql)) {
    echo "Record updated successfully";
} else {
    echo "Error updating record: " . mysqli_error($conn);
}

我认为问题在于您试图插入一些特殊字符。比如``。您需要对其进行转义
使用此函数`

function clean($str)
{
    $str = @trim($str);
    if (get_magic_quotes_gpc()){
        $str = stripslashes($str);
    }
    return mysql_real_escape_string($str);
}

在您的代码中,这样使用
$update_sql = "UPDATE wp_posts SET post_content=clean('$new_content') WHERE ID=602";

来自描述VARCHAR:的MySQL手册

可变长度的字符串。注意:存储值时会删除尾部空格(这与ANSI SQL规范不同)。长度的范围为1到255个字符。除非给出BINARY关键字,否则VARCHAR值将以不区分大小写的方式进行排序和比较。

您正在尝试INSERT一个对于post_content列来说太长的字符串。请尝试使用MEDIUMTEXT,它可以存储大约1600万个字符。