it-swarm.dev

كيفية تحميل الصور في قاعدة بيانات MySQL باستخدام PHP code

أحاول حفظ الصور في قاعدة البيانات الخاصة بي من نموذج HTML. لقد كتبت PHP رمز لإنجاز هذه المهمة. لا يقوم البرنامج بإنشاء أي رسالة خطأ ، ولكن أيضًا لا يقوم بإدراج بيانات الصورة في قاعدة بيانات MySQL. يرجى التحقق من ذلك. أنا هنا أقوم بمشاركة مقتطف من الشفرة.

        /*-------------------
    IMAGE QUERY 
    ---------------*/


    $file   =$_FILES['image']['tmp_name'];
    if(!isset($file))
    {
      echo 'Please select an Image';
    }
    else 
    {
       $image_check = getimagesize($_FILES['image']['tmp_name']);
       if($image_check==false)
       {
        echo 'Not a Valid Image';
       }
       else
       {
        $image = file_get_contents ($_FILES['image']['tmp_name']);
        $image_name = $_FILES['image']['name'];
        if ($image_query = mysql_query ("insert into product_images values (1,'$image_name',$image )"))
        {
          echo $current_id;
         //echo 'Successfull';
        }
        else
        {
          echo mysql_error();
        }
       }
   }
        /*-----------------
    IMAGE QUERY END
    ---------------------*/

    <form action='insert_product.php' method='POST' enctype='multipart/form-data' ></br>
            File        : <input type='file' name= 'image' >
    </form>

رسالة خطأ لديك خطأ في بناء جملة SQL الخاص بك؛ تحقق من الدليل الذي يتوافق مع إصدار خادم MySQL للحصول على الصيغة الصحيحة لاستخدامها بالقرب من "" في السطر 1

22
Taha Kirmani

أولاً ، يجب عليك التحقق مما إذا كان عمود الصورة هو نوع BLOB !

لا أعرف أي شيء عن جدول SQL الخاص بك ، ولكن إذا كنت سأحاول أن أجعل مني مثالاً.

لدينا حقول id (int) ، image (نقطة) و image_name (varchar (64)).

لذلك يجب أن يبدو الرمز هكذا (افترض أن المعرف هو دائمًا "1" ودعونا نستخدم mysql_query):

$image = addslashes(file_get_contents($_FILES['image']['tmp_name'])); //SQL Injection defence!
$image_name = addslashes($_FILES['image']['name']);
$sql = "INSERT INTO `product_images` (`id`, `image`, `image_name`) VALUES ('1', '{$image}', '{$image_name}')";
if (!mysql_query($sql)) { // Error handling
    echo "Something went wrong! :("; 
}

أنت تفعل ذلك خطأ في نواح كثيرة. لا تستخدم وظائف mysql - يتم إهمالها! استخدم PDO أو MySQLi . يجب عليك أيضًا التفكير في تخزين مواقع الملفات على القرص. يُعتقد أن استخدام MySQL لتخزين الصور هو Bad Idea ™. يمكن معالجة جدول SQL مع البيانات الكبيرة مثل الصور أن يكون مشكلة.

أيضا شكل HTML الخاص بك هو خارج المعايير. يجب أن تبدو هذه:

<form action="insert_product.php" method="POST" enctype="multipart/form-data">
    <label>File: </label><input type="file" name="image" />
    <input type="submit" />
</form>

ملاحظة جانبية:

عند التعامل مع الملفات وتخزينها كـ BLOB ، يجب الهروب من البيانات باستخدام mysql_real_escape_string() ، وإلا فسيؤدي ذلك إلى حدوث خطأ في بناء الجملة.

41
Wiktor Mociun

فقط القليل من التفاصيل

  • إضافة مجال الخلية

`image` blob

  • الحصول على البيانات من الصورة

$image = addslashes(file_get_contents($_FILES['image']['tmp_name']));

  • إدراج بيانات الصورة في ديسيبل

$sql = "INSERT INTO `product_images` (`id`, `image`) VALUES ('1', '{$image}')";

  • عرض الصورة على الويب

<img src="data:image/png;base64,'.base64_encode($row['image']).'">

  • النهاية
18
Sean