我无法将图片上传到我的数据库中。现在表单发送并成功处理,但是当我放入变量时它没有正确发送 包含file_get_contents信息。所以这是我的代码到目前为止。
<?php
if (isset($_POST['submit-ads']))
{
$filename = $_FILES["file_uploaded"]["name"];
$filecontent = $_FILES["file_uploaded"]["tmp_name"];
$filesize = $_FILES["file_uploaded"]["size"];
$filetype = $_FILES["file_uploaded"]["type"];
if ($filetype == "image/png" || "image/jpeg" || "image/bmp")
{
if ($filesize > 0 && $filesize < 1000000000)
{
if ($newContent = file_get_contents($filecontent))
{
if ($conn = mysqli_connect("localhost", "root", "", "smartlea_browser_extensions"))
{
$newQuery = "INSERT INTO `food`(`image`, `imagename`, `access_token`) VALUES('".$newContent."', '".$filename."', '123')";
if ($query = mysqli_query($conn, $newQuery))
{
echo 'Works erase this line';
}
else
{
die("Could not insert file".mysqli_error($conn));
}
}
else
{
die('Could not connect to mysql');
}
}
else
{
die('ERROR getting file content. Invalid filepath');
}
}
else
{
die('Invalid filesize');
}
}
else
{
die('Image type not supported');
}
}
?>
现在这不起作用。问题再次出现在执行查询的行上。当我把$ newContent放到字段中时。它会抛出此错误
Could not insert fileYou have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'P�$�>�̒��(j�d�nf��� 5I�O7������$٧�Y�sqEM���' at line 1
有人可以解释为什么这不起作用吗?我想要做的只是将图像上传到我的数据库。请不要建议将其保存 一个文件夹,因为有一个严格的原因,我这样做。现在没有涉及ajax。只是PHP代码(这是一个片段,但所涉及的一切 该功能)如果您需要任何其他信息让我知道,错误就在上面。
答案 0 :(得分:2)
您需要使用函数mysqli_real_escape_string来确保您的文件内容不会破坏您的SQL查询。 像这样:
$newContent = mysqli_real_escape_string($conn, $newContent);
// Now run the query
更好的是,使用准备好的陈述,详细了解here。
答案 1 :(得分:0)
请注意这些类型的INSERT查询。您很容易受到SQL Injection这样的攻击。您获得的错误是这些类型的攻击的红旗。您在查询中插入的数据包含不受支持的字符。
将列image
更改为LONGBLOB
类型。请阅读SQL注入漏洞。至少要清理您的输入或使用Parameterized Queries
答案 2 :(得分:-1)
将数据库中的图像类型更改为varchar,并在数据库中保存图像的路径。
您还可以使用move_uploaded_file()
方法在目标路径中移动上传的文件。