2013-02-28 40 views
2

我有以下的SQL更新声明和变量正在进行消毒之前。信息来自表单,数据库列是TEXT。插入工作完美无缺。PHP的MySQL更新声明将不会接受任何东西,但数字值

DB结构:

FILE_TITLE =文本file_description =文章ID = INT

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

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

我必须错过一些非常基本的东西。任何意见,将不胜感激。

回答

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); 
+0

谢谢。我会重写这个。 – Daniel 2013-03-04 11:30:37

+0

不客气。阅读[关于]如何接受答案。 – 2013-03-04 11:32:42

1

需要引用的文字和字符串值:

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

数字值可以在没有引用传递。

+0

感谢。我只是把一起mysqli_query($ CON, “UPDATE图像 \t \t \t SET FILE_TITLE ='”。$ FileTitle。 “ 'file_description ='”。$ FileDescription。 “ ' \t \t \t WHERE ID ='”。$ image_id “'”)。它现在似乎工作。 – Daniel 2013-02-28 09:58:31

0

对文本值使用单引号。

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

因为字符串需要用单引号包装。单引号是字符串常量,而反引号的标识符,

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

一点题外话,查询与SQL Injection脆弱的,如果变量的值(小号)从外面走了进来。请看下面的文章,了解如何防止它。通过使用PreparedStatements你可以摆脱使用单引号围绕值。