我正在尝试将图像存储在我的mysql数据库中。我知道这可能不是最聪明的事情,但这项工作需要它。我已经在线查看了如何使用PHP代码存储图像,但每次我尝试遵循指南时,似乎会出现一个随机问题。现在使用此代码,我已设法获取存储在数据库中的所有信息,但图像和图像名称除外。有关如何使其工作的任何建议?
$connect = mysqli_connect("host", "user", "pass", "dbname");
if(!empty($_POST))
{
$output = '';
$title = mysqli_real_escape_string($connect, $_POST["title"]);
$image = addslashes($_FILES['image']['tmp_name']);
$name = addslashes($_FILES['image']['name']);
$image = file_get_contents($image);
$image = base64_encode($image);
$text2 = mysqli_real_escape_string($connect, $_POST["text2"]);
$text1 = mysqli_real_escape_string($connect, $_POST["text1"]);
$dtime = date('Y-m-d H:i:s');
$query = "
INSERT INTO news(title, image, name, text2, text1, dtime)
VALUES('$title', '{$image}', '$name', '$text2', '$text1', '$dtime');
";
我尝试了不同的选项,将$ connect添加到$ image和$ name以使其像其余部分一样或将addslashes更改为mysql_real_escape_string。
如果你有时间我会很感激,我需要一些帮助才能让它发挥作用!
答案 0 :(得分:0)
这可能是因为您在读取文件之前在文件路径中添加了斜杠。
<?php
$connect = mysqli_connect("host", "user", "pass", "dbname");
if(!empty($_POST))
{
$output = '';
$title = mysqli_real_escape_string($connect, $_POST["title"]);
// Replace below two lines...
// $image = addslashes($_FILES['image']['tmp_name']);
// $image = file_get_contents($image);
// With:
$image = file_get_contents($_FILES['image']['tmp_name']);
$name = addslashes($_FILES['image']['name']);
$image = base64_encode($image);
$text2 = mysqli_real_escape_string($connect, $_POST["text2"]);
$text1 = mysqli_real_escape_string($connect, $_POST["text1"]);
$dtime = date('Y-m-d H:i:s');
$query = "
INSERT INTO news(title, image, name, text2, text1, dtime)
VALUES('$title', '{$image}', '$name', '$text2', '$text1', '$dtime');
";
此外,您可能不希望在数据库中存储base64_encoded文件,因为它会增加存储大小(Base64: What is the worst possible increase in space usage?)。将图像存储为数据库中的blob(=二进制数据)。
考虑到这对您不起作用,请尝试以下方法进行调试:
<?php
// Print out the submitted files and the data.
var_dump($_FILES);
// Check to see if it's not empty, whether the submitted filename is actually "image",
echo (file_exists($_FILES['image']['tmp_name']) ? 'File exists!' : 'File does not exist'), PHP_EOL;
echo (is_readable($_FILES['image']['tmp_name']) ? 'Can read the file!' : 'Can not read the file'), PHP_EOL;
$file = file_get_contents($_FILES['image']['tmp_name']);
echo 'File size: ', strlen($file), ' bytes (base64: ', strlen(base64_encode($file)), ' bytes)';
尝试一下,看看是否有任何异常......