0

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

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

这张 $picture 您可以轻松地插入数据库表中,没有任何麻烦。

*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 的连续 $value 插入数据库时​​,MySQL 会警告“出现问题”。为什么?

4

2 回答 2

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_* 函数)。

于 2013-04-17T10:47:41.800 回答
0

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

你为什么要这样做addslashes()?尝试mysql_real_escape_string()改用。

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

您可能会在 MySQL相关的二进制数据中找到这个问题的答案。

于 2013-04-17T10:33:46.600 回答