在文章表中上传图像后存储image_id

时间:2010-03-24 14:24:33

标签: php mysql image upload

根据这个question我成功创建了上传图片,但现在我需要将image_id存储到另一个名为articles的表中。我不知道这是否正确,但我试图从像这样的表格图像中选择image_id

$select_image=mysql_query("select image_id from image where image_name = $fileName") or die(mysql_error());

并将结果提取到我的文章插入查询中,如此

$fetch=mysql_fetch_array($select_image);

$query=mysql_query("insert into articles (article_name,article_category,article_subcategory,article_body,article_summary,article_tags,article_photo,article_timedate) values ('$article_title','$CategoryID','$ProductID','$article_body','$article_summary','$fetch[image_id]','$time')") or die ('Error, Query Faild'.mysql_error());

这是对的吗? mysql_error一直在说

  

'where子句'中的未知栏'Penguins.jpg'

4 个答案:

答案 0 :(得分:3)

这是与mysql语法相关的问题。 直接进入查询的所有数据必须使用2条规则准备:
1.必须使用mysql_real_escape_string()函数转义数据 2.用引号括起来

所以,代码必须是

$fileName=mysql_real_escape_string($fileName);
$select_image=mysql_query("select image_id from image where image_name = '$fileName'") or die(mysql_error()); 

此外,如果您在此查询之前插入图像,则无需选择其ID。您可以使用mysql_insert_id()功能

答案 1 :(得分:2)

问题是您的文件名未被引用,因此您的MySQL服务器正在尝试处理查询:

select image_id from image where image_name = Penguins.jpg

更糟糕的是有人上传了一个名为

的文件
  

1; EVIL MYSQL QUERY HERE

他们可以在您的服务器上执行任意MySQL。这称为SQL注入攻击。

查看涵盖此内容的PHP manual page

答案 2 :(得分:1)

您可以通过调用

选择最后插入的ID
SELECT LAST_INSERT_ID()

而不是

select image_id from image where image_name = $fileName

答案 3 :(得分:0)

您需要在第一个查询中将$fileName放在引号中,即'$fileName'