我有以下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");