为什么以某种方式分解关联数组更改以前存储的图片?

时间:2013-04-17 10:26:59

标签: php mysql

让我们将图像文件读入varialble图片:

$picture = addslashes(fread(fopen($image, "r"), filesize($image))); 

这张$图片可以很容易地插入数据库表中。

*for example*:  INSERT INTO $banners(banner) VALUES( $picture );

出于某种原因,我们创建一个关联数组$ final:

$final["banner"] = $picture;
$final["place"] = something...

稍后让我们分解$ final并将获得的值插入数据库:

  $fields = "";      $values = "";

  while (list($name, $value) = each( $final ))
  {
        $fields .= "$name, ";
        $values .= "'$value', ";
  }
  // Cut trailing commas
  $values_fields = ereg_replace(", $", "", $values_fields);
  $values = ereg_replace(", $", "", $values);

  // Execute query
  $query = "INSERT INTO banners($values_fields) VALUES($values)";
  $res = mysql_db_query($database, $query) or mysql_die();     

现在,当将$ picture的连续$值插入数据库时​​,MySQL警告“出错了”。为什么?

2 个答案:

答案 0 :(得分:1)

首先,不要破坏您的数据。直接阅读并保持变量清洁:

$picture = file_get_contents($image);

接下来,准备插入数据:

$final["banner"] = mysqli_real_escape_string($picture);
$final["place"]  = $something;

最后,没有必要遍历您的数组,因为它只包含一个记录。您不引用值,导致错误。

$fields = "`" . implode("`, `", array_keys($final)) . "`";
$values = "'" . implode("', '", array_values($final)) . "'";

$query  = "INSERT INTO banners ({$fields}) VALUES ({$values})";
$result = mysqli_query($database, $query) or die(mysqli_error($database));

我在这里使用MySQLi,因为不推荐使用mysql_ *函数(以及ereg_ *函数)。

答案 1 :(得分:0)

如果您在此处发布的代码正是您尝试运行的代码,请注意您正在$fields变量中累积字段名称,但$values_fields中的“剪切尾随逗号”就是在此处点空。将空$values_fields放入查询可能是导致mysql错误的原因。

你为什么要做addslashes()?请尝试使用mysql_real_escape_string()

还要确保您尝试将图像放入的数据库列的类型为BLOB或LONGBLOB。

您可以找到此问题的答案Binary Data in MySQL相关。