2

我有以下 sql update 语句,并且变量正在被预先清理。信息来自表单,数据库列是 TEXT。插入工作完美无缺。

数据库结构:

file_title=文本 file_description=文本 id=INT

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

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

我一定只是错过了一些非常基本的东西。任何意见,将不胜感激。

4

4 回答 4

1

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

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

可以不加引号地传递数值。

于 2013-02-28T09:50:27.373 回答
1

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

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

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

于 2013-02-28T09:51:52.963 回答
0

对文本值使用单引号。

mysqli_query($con,"UPDATE images
        SET file_title='$FileTitle', file_description='$FileDescription'
        WHERE id=$image_id");
于 2013-02-28T09:51:34.527 回答
0

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);
于 2013-02-28T09:52:55.200 回答