مشكلة فى استخدام كلاس لادخال فى قاعدة البيانات باستخدام sqlite او mysqli

*class con

{

public $con;
public function __construct(){
    $con = mysqli_connect('localhost', 'root', '', 'whatsapp');

    if($con){echo 'Connection <br/>';}else{echo 'Problem Connection <br/>';}

    if (mysqli_connect_errno())
    {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }}
public function conQuery($conQuery){
    return mysqli_query($this->con,$conQuery);
}

} $c = new con(); $r = "INSERT INTO send(id, packets, phone, type, send, date) VALUES (null,'111111111','22222222','text',0,'1/1/1')"; $e = mysqli_query($c->con,$r); if ($e) { echo 'ok'; } else { echo 'no'; }*

هذا هو الكود اذا قمت باخذ امر الادخال فى phpmyadmin ينفذ بنجاح ولكن فى هذا الكود لم يتم الادخال


لن اعلق على الكود ولكن ساقول لك ما هو الخطأ ,

عليك صديقي ان تعلم ان SQL كاي لغة اخرى يوجد بها كلمات محجوزة مسبقاً لا يمكنك استخدامها مرة اخرة لغرض اخر مثل (type, date) قم بتغيير اسماء هذه الحقول .

الى :

type_anything

date_anything

او قم باختصارهم : typ , td

ومن ثم اذا كان حقل date من نوع date فصيغة التاريخ خاطئة في حالتك حاول ادخل تاريخ صحيح 01/01/2015 مثلاً .

كل هذه الامور تعمل على عدم ادخال البيانات الى قاعدة البيانات وعدم اظهار اي اخطاء (لان جملة insert صحيحة).


بالنهاية صديقي هذا كلاس قمت بانشائه يعتمد على pdo ربما يفيدك :

www.phptricks.org/pdo-class/

  • يمكن إستخدام علامة الكاشيدة "`" لإمكانية إستخدام اسماء محجوزة بدون تعارض.

نعم صحيح .

ولكن انا شخصيا معتاد على عدم استخدامها فكثير ما انساها بمثل هذه الحالات وتظهر هذه المشكلة وتاخذ مني وقت كبير وانا ابحث عن المشكلة فلكي اختصر على نفسي هذا العناء اقوم بتسمية الحقول بكلمتين (اختصار اسم الجدول_اسم الحقل).

فمثلا لو اسم الجدول products

اسمي الحقول (pro_id, pro_cat .... etc).

  • حتى أنا لا أستخدمها ツ وأستخدم نفس الإسلوب الذي ذكرته (proID, proCat.... etc) أعلم أنها غير حساسة لحالة الأحرف ولكن للإيضاح وأيضاً أقوم بتوحيد المسميات على مستوى المشروع لسهولة التتبع.

انا غيرت برده الاسماء بس نفس المشكلة

ده الكلاس الذى لم ينجح فيه عملية الادخال

وهذا من غير كلاس ونجحت عملية الادخال

ولو هتلاحظوا ان هو هو نفس الأمر!!!

$e = mysqli_query($c->con,$r);

حسناً هل جربت ان ترى ما القيمة الموجودة في $c->con ؟؟؟ استبدل :  

    public function __construct(){
           $con = mysqli_connect('localhost', 'root', '', 'whatsapp');


        if($con){echo 'Connection 
 ';}else{echo 'Problem Connection 
 ';}


        if (mysqli_connect_errno())
        {
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
           }}

وضع : 

    public function __construct(){
        $this->con = mysqli_connect('localhost', 'root', '', 'whatsapp');

         if(this->$con){echo 'Connection 

';}else{echo 'Problem Connection ';}

        if (mysqli_connect_errno())
        {
         echo "Failed to connect to MySQL: " . mysqli_connect_error();
        }}

تم حل المشكلة (المشكلة مكنتشى فى ان الاتصال فيه خطأ المشكلة كانت فى دالة query لم تكن تنفذ عند استدعائها من داخل الكلاس لكن لو قمت بإنشاء كائن خارج الكلاس كانت تنجح)

الحل هنا إذا اردت او احد اراد مراجعته ولمعرفة الحل

  • قمت بتغير الاسماء ولكن نفس المشكلة وللعلم الأمر القديم والجديد بعد تغير ايضاً الاسماء عملية الادخال تنج عندما يتم الامر داخل phpmyadmin فقط ام عن طريق كود php فلا يتم الادخال نفس الطريقة مع sqlite

  • حقل date نوعه varchar