Php与file_get_contents有关

时间:2016-09-02 20:21:44

标签: php

我无法将图片上传到我的数据库中。现在表单发送并成功处理,但是当我放入变量时它没有正确发送 包含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代码(这是一个片段,但所涉及的一切 该功能)如果您需要任何其他信息让我知道,错误就在上面。

3 个答案:

答案 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()方法在目标路径中移动上传的文件。

http://php.net/manual/fr/features.file-upload.php