PHP MySQL Update语句不接受任何值,只有数字值


PHP MySQL Update Statement Won't Accept Anything But Numeric Values

我有以下sql更新语句,并且事先对变量进行了清理。信息来自表单,数据库列是TEXT。insert工作完美。

DB结构:

file_title=text file_description=text id=INT

mysqli_query($con,"UPDATE images
        SET file_title=$FileTitle, file_description=$FileDescription
        WHERE id=$image_id");

由于一些未知的原因,我只能使用数值更新,因为它不会使用任何文本更新,这是令人沮丧的。

我一定是错过了一些非常基本的东西。如有任何建议,不胜感激。

您需要引用文本和字符串值:

mysqli_query($con,"UPDATE images
        SET file_title='$FileTitle', file_description='$FileDescription'
        WHERE id=$image_id");

可以不加引号传递数值

因为字符串需要用单引号括起来。单引号用于字符串字面值,反引号用于标识符,

UPDATE images
SET    file_title='$FileTitle', file_description='$FileDescription'
WHERE id=$image_id

作为旁注,如果变量的值(s)来自外部,则查询容易受到SQL Injection的攻击。请看看下面的文章,了解如何防止它。通过使用PreparedStatements,您可以摆脱使用单引号的值。

    如何防止SQL注入在PHP?

CHAR值必须加引号,但更重要的是您应该使用预处理语句:

$stmt = mysqli_prepare($con,"UPDATE images
    SET file_title=?, file_description=?
    WHERE id=?");
mysqli_stmt_bind_param($stmt, 'ssd', $FileTitle, $FileDescription, $image_id);
mysqli_stmt_execute($stmt);

文本值使用单引号。

mysqli_query($con,"UPDATE images
        SET file_title='$FileTitle', file_description='$FileDescription'
        WHERE id=$image_id");