让我们将图像文件读入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警告“出错了”。为什么?
答案 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相关。