DaoOne . إنه غلاف بسيط لـ Mysqli
هذه المكتبة في أسرع وقت ممكن. معظم العمليات عبارة عن إدارة سلسلة/صفيف بسيطة.
ملاحظة: تم نقل هذا الإصدار إلى https://github.com/EFTEC/PdoOne
يقوم PdoOne بنفس الوظيفة ولكنه يعمل مع مكتبة PDO (بدلاً من MySQLi). يعمل PdoOne حاليًا مع Mysqli وSqlSrv ولكنه يحتوي على العديد من الميزات الأخرى التي لن تكون موجودة في DaoOne
التثبيت عبر الملحن
يتطلب الملحن eftec/pdoone
يمكن أن تعمل هذه المكتبة جنبًا إلى جنب مع eftec/ DaoOne .
غيّر الفئة بدلاً من استخدام eftec/ DaoOne -> eftec/pdoone
مثال:
قبل:
/** @var eftec DaoOne $db */
$ db = null ;
بعد:
/** @var eftecPdoOne $db */
$ db = null ;
قبل:
$ db = new DaoOne ( ' 127.0.0.1 ' , ' root ' , ' abc.123 ' , ' sakila ' );
بعد:
$ db = new DaoOne ( ' mysql ' , ' 127.0.0.1 ' , ' root ' , ' abc.123 ' , ' sakila ' ); // check 'mysql'
إذا استخدمنا DaoOne ::runGen(false)، فيجب علينا التحقق من النتيجة. يقوم runGen ( DaoOne ) بإرجاع كائن mysqli_result. يقوم runGen (PdoOne) بإرجاع كائن pdostatement.
قبل:
$ result = $ db -> runGen ( false ); // it returns a mysqli_result
$ result -> fetch_assoc ();
$ result -> free_result ();
بعد:
$ result = $ db -> runGen ( false ); // it returns a pdostatement
$ result -> fetch ( PDO :: FETCH_ASSOC );
$ result = null ;
تحويل هذا
$stmt->bind_param("s", $_POST['name']);
$stmt->execute();
$result = $stmt->get_result();
if($result->num_rows === 0) exit('No rows');
while($row = $result->fetch_assoc()) {
$ids[] = $row['id'];
$names[] = $row['name'];
$ages[] = $row['age'];
}
var_export($ages);
$stmt->close();
في هذا
$products=$dao
->select("*")
->from("myTable")
->where("name = ?",[$_POST['name']])
->toList();
قم بإضافة المتطلبات التالية إلى الملحن.json، ثم قم بتحديث الملحن.
{
"require" : {
"eftec/ DaoOne " : " ^3.15 "
}
}
أو تثبيته عبر cli باستخدام
يتطلب الملحن eftec/ DaoOne
ما عليك سوى تنزيل الملف lib/ DaoOne .php وحفظه في مجلد.
$ dao = new DaoOne ( " 127.0.0.1 " , " root " , " abc.123 " , " sakila " , "" );
$ dao -> connect ();
أين
$ sql = " CREATE TABLE `product` (
`idproduct` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(45) NULL,
PRIMARY KEY (`idproduct`)); " ;
$ dao -> runRawQuery ( $ sql );
$ sql = " insert into `product`(name) values(?) " ;
$ stmt = $ dao -> prepare ( $ sql );
$ productName = " Cocacola " ;
$ stmt -> bind_param ( " s " , $ productName ); // s stand for string. Also i =integer, d = double and b=blob
$ dao -> runQuery ( $ stmt );
ملاحظة: يمكنك أيضًا الإدراج باستخدام إدراج سلسلة إجرائية($table,$schema,[$values])
$ dao -> runRawQuery ( ' insert into `product` (name) values(?) '
, array ( ' s ' , ' cocacola ' ));
تقوم بإرجاع mysqli_statement.
$ sql = " select * from `product` order by name " ;
$ stmt = $ dao -> prepare ( $ sql );
$ dao -> runQuery ( $ stmt );
$ rows = $ stmt -> get_result ();
while ( $ row = $ rows -> fetch_assoc ()) {
var_dump ( $ row );
}
يجب معالجة هذا البيان يدويا.
تقوم بإرجاع مجموعة النقابي.
$ sql = " select * from `product` order by name " ;
$ stmt = $ dao -> prepare ( $ sql );
$ dao -> runQuery ( $ stmt );
$ rows = $ stmt -> get_result ();
$ allRows = $ rows -> fetch_all ( MYSQLI_ASSOC );
var_dump ( $ allRows );
try {
$ sql = " insert into `product`(name) values(?) " ;
$ dao -> startTransaction ();
$ stmt = $ dao -> prepare ( $ sql );
$ productName = " Fanta " ;
$ stmt -> bind_param ( " s " , $ productName );
$ dao -> runQuery ( $ stmt );
$ dao -> commit (); // transaction ok
} catch ( Exception $ e ) {
$ dao -> rollback ( false ); // error, transaction cancelled.
}
يبدأ الصفقة
يرتكب الصفقة.
إنه يتراجع عن الصفقة.
إذا كان صحيحا (افتراضي)، فإنه يلقي خطأ إذا حدث خطأ. إذا كان كاذبا، فإن التنفيذ يستمر
صحيح إذا كانت قاعدة البيانات متصلة بطريقة أخرى، فهذا خطأ.
يمكنك أيضًا إنشاء استعلام إجرائي.
مثال:
$ results = $ dao -> select ( " * " )-> from ( " producttype " )
-> where ( ' name=? ' , [ ' s ' , ' Cocacola ' ])
-> where ( ' idproducttype=? ' , [ ' i ' , 1 ])
-> toList ();
يولد أمر تحديد.
$ results = $ dao -> select ( " col1,col2 " )->. . .
يولد الاستعلام: حدد col1,col2 ....
$ results = $ dao -> select ( " select * from table " )->. . .
يولد الاستعلام: حدد * من الجدول ....
يولد أمر تحديد.
$ results = $ dao -> select ( " col1,col2 " )-> distinct (). . .
يولد الاستعلام: حدد col1,col2 مميزًا ....
ملاحظة: ->إرجاع مميز('فريد') حدد فريدًا ..
يولد من الأمر.
$ results = $ dao -> select ( " * " )-> from ( ' table ' ). . .
يولد الاستعلام: حدد * من الجدول
يمكن أن تكون $tables عبارة عن جدول واحد أو بناء SQL. على سبيل المثال، الأمر التالي صالح:
$ results = $ dao -> select ( " * " )-> from ( ' table t1 inner join t2 on t1.c1=t2.c2 ' ). . .
يولد أمر حيث.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> where ( ' p1=1 ' ). . .
يقوم بإنشاء الاستعلام: حدد * من الجدول حيث p1=1
ملاحظة: ArrayParameters عبارة عن مصفوفة على النحو التالي: type,value.
حيث يكون النوع i=integer أو d=double أو s=string أو b=blob. في حالة الشك، استخدم "s"
مثال على معلمات المصفوفة:
['i',1 ,'s','hello' ,'d',20.3 ,'s','world']
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> where ( ' p1=? ' ,[ ' i ' , 1 ]). . .
يقوم بإنشاء الاستعلام: حدد * من الجدول حيث p1=?(1)
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> where ( ' p1=? and p2=? ' ,[ ' i ' , 1 , ' s ' , ' hello ' ]). . .
يُنشئ الاستعلام: حدد * من الجدول حيث p1=?(1) وp2=?('hello')
ملحوظة. حيث يمكن أن تكون متداخلة.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> where ( ' p1=? ' ,[ ' i ' , 1 ])
-> where ( ' p2=? ' ,[ ' s ' , ' hello ' ]). . .
يُنشئ الاستعلام: حدد * من الجدول حيث p1=?(1) وp2=?('hello')
يمكنك أيضًا استخدام:
$ results = $ dao -> select ( " * " )-> from ( " table " )
-> where ([ ' p1 ' => ' Coca-Cola ' , ' p2 ' => 1 ])
-> toList ();
يُنشئ الاستعلام: حدد * من الجدول حيث p1=?(Coca-Cola) وp2=?(1)
يولد أمر النظام.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> order ( ' p1 desc ' ). . .
يقوم بإنشاء الاستعلام: حدد * من ترتيب الجدول حسب p1 desc
يولد أمر المجموعة.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> group ( ' p1 ' ). . .
يقوم بإنشاء الاستعلام: حدد * من مجموعة الجدول بواسطة p1
يولد أمر المجموعة.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> group ( ' p1 ' )
-> having ( ' p1>? ' , array ( ' i ' , 1 )). . .
ينشئ الاستعلام: حدد * من مجموعة الجدول بواسطة p1 بعد p1>?(1)
ملاحظة: يمكن أن يكون متداخلاً وجود ()->وجود ()
ملحوظة: يمكن أن يكون بدون وجود معلمات ('col>10')
قم بتشغيل إنشاء الاستعلام.
لاحظ أنه إذا كانت قيمة returnArray صحيحة، فإنها تُرجع مصفوفة ترابطية. إذا كانت قيمة returnArray خاطئة، فإنها تُرجع نتيجة mysqli_result
ملاحظة: يقوم بإعادة تعيين المعلمات الحالية (مثل التحديد الحالي ومن وأين وما إلى ذلك)
إنه ماكرو من runGen. تقوم بإرجاع مجموعة اقترانية أو فارغة.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> toList ()
إنه ماكرو من runGen. تقوم بإرجاع mysqli_result أو فارغة.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> toResult ()
إنه ماكرو من runGen. تقوم بإرجاع الصف الأول (إن وجد، وإذا لم يكن كذلك، فإنها تُرجع خطأ) كمصفوفة ترابطية.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> first ()
إنه ماكرو من runGen. تقوم بإرجاع الصف الأخير (إن وجد، وإذا لم يكن كذلك، فإنها تُرجع خطأ) كمصفوفة ترابطية.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> last ()
في بعض الأحيان يكون تشغيل الأمر () والأول () أكثر كفاءة لأن الأخير () يقرأ جميع القيم.
يقوم بإرجاع أمر SQL.
$ sql = $ dao -> select ( " * " )
-> from ( ' table ' )
-> sqlGen ();
echo $ sql ; // returns select * from table
$ results = $ dao -> toList (); // executes the query
ملاحظة: لا يؤدي إلى إعادة تعيين الاستعلام.
هناك أربع طرق لتنفيذ كل أمر.
لنفترض أننا نريد إضافة عدد صحيح في العمود col1 بقيمة 20
المخطط والقيم باستخدام قائمة القيم : حيث القيمة الأولى هي العمود، والثانية هي نوع القيمة (i=integer,d=double,s=string,b=blob) والمصفوفة الثانية تحتوي على القيم.
$ dao -> insert ( " table "
,[ ' col1 ' , ' i ' ]
,[ 20 ]);
المخطط والقيم في نفس القائمة : حيث القيمة الأولى هي العمود، والثانية هي نوع القيمة (i=integer,d=double,s=string,b=blob) والثالثة هي القيمة.
$ dao -> insert ( " table "
,[ ' col1 ' , ' i ' , 20 ]);
المخطط والقيم باستخدام صفيفين ترابطيين :
$ dao -> insert ( " table "
,[ ' col1 ' => ' i ' ]
,[ ' col1 ' => 20 ]);
المخطط والقيم باستخدام مصفوفة ترابطية واحدة : يتم حساب النوع تلقائيًا.
$ dao -> insert ( " table "
,[ ' col1 ' => 20 ]);
يولد أمر إدراج.
$ dao -> insert ( " producttype "
,[ ' idproducttype ' , ' i ' , ' name ' , ' s ' , ' type ' , ' i ' ]
,[ 1 , ' cocacola ' , 1 ]);
استخدام السلسلة المتداخلة (صفيف واحد)
$ dao -> from ( " producttype " )
-> set ([ ' idproducttype ' , ' i ' , 0 , ' name ' , ' s ' , ' Pepsi ' , ' type ' , ' i ' , 1 ])
-> insert ();
باستخدام سلسلة متداخلة مجموعة متعددة
$ dao -> from ( " producttype " )
-> set ( " idproducttype=? " ,[ ' i ' , 101 ])
-> set ( ' name=? ' ,[ ' s ' , ' Pepsi ' ])
-> set ( ' type=? ' ,[ ' i ' , 1 ])
-> insert ();
أو (يتم تعريف النوع، في الإمكان، تلقائيًا بواسطة MySql)
$ dao -> from ( " producttype " )
-> set ( " idproducttype=? " ,[ ' i ' , 101 ])
-> set ( ' name=? ' , ' Pepsi ' )
-> set ( ' type=? ' , 1 )
-> insert ();
باستخدام مجموعة تعريفية سلسلة متداخلة
$ dao -> from ( " producttype " )
-> set ( ' (idproducttype,name,type) values (?,?,?) ' ,[ ' i ' , 100 , ' s ' , ' Pepsi ' , ' i ' , 1 ])
-> insert ();
يُنشئ الاستعلام: أدخل في قيم Productype(idproducttype,name,type) (؟،؟،؟) ....
يولد أمر إدراج.
$ dao -> update ( " producttype "
,[ ' name ' , ' s ' , ' type ' , ' i ' ] //set
,[ 6 , ' Captain-Crunch ' , 2 ] //set
,[ ' idproducttype ' , ' i ' ] // where
,[ 6 ]); // where
$ dao -> update ( " producttype "
,[ ' name ' => ' Captain-Crunch ' , ' type ' => 2 ] // set
,[ ' idproducttype ' => 6 ]); // where
$ dao -> from ( " producttype " )
-> set ( " name=? " ,[ ' s ' , ' Captain-Crunch ' ]) //set
-> set ( " type=? " ,[ ' i ' , 6 ]) //set
-> where ( ' idproducttype=? ' ,[ ' i ' , 6 ]) // where
-> update (); // update
أو
$ dao -> from ( " producttype " )
-> set ( " name=? " , ' Captain-Crunch ' ) //set
-> set ( " type=? " , 6 ) //set
-> where ( ' idproducttype=? ' ,[ ' i ' , 6 ]) // where
-> update (); // update
يقوم بإنشاء الاستعلام: تحديث
name
مجموعة نوع المنتج =؟،type
=؟ حيثidproducttype
=؟ ....
يولد أمر الحذف.
$ dao -> delete ( " producttype "
,[ ' idproducttype ' , ' i ' ] // where
,[ 7 ]); // where
$ dao -> delete ( " producttype "
,[ ' idproducttype ' => 7 ]); // where
يُنشئ الاستعلام: هل تريد الحذف من نوع المنتج حيث
idproducttype
=؟ ....
يمكنك أيضًا الحذف عبر سلسلة منشئ DQL.
$ dao -> from ( " producttype " )
-> where ( ' idproducttype=? ' ,[ ' i ' , 7 ]) // where
-> delete ();
$ dao -> from ( " producttype " )
-> where ([ ' idproducttype ' => 7 ]) // where
-> delete ();
يُنشئ الاستعلام: هل تريد الحذف من نوع المنتج حيث
idproducttype
=؟ ....
التسلسل هو بديل لحقل AUTO_NUMERIC. يستخدم جدولًا لإنشاء معرف فريد.
يعتمد التسلسل المستخدم على Snowflake الخاص بتويتر ويتم إنشاؤه بناءً على الوقت (بالميكروثانية) ومعرف العقدة والتسلسل. يؤدي هذا إلى إنشاء قيمة طويلة (int 64) وهي فريدة من نوعها
$dao->nodeId=1; // optional
$dao->tableSequence='snowflake'; // optional
$dao->createSequence(); // it creates a table called snowflake and a function called next_snowflake()
$dao->getSequence() // string(19) "3639032938181434317"
$dao->getSequence(true) // returns a sequence by flipping some values.
$dao->getSequencePHP([unpredictable=false]) يُرجع تسلسلاً دون استخدام جدول. يعد هذا التسلسل أكثر كفاءة من $dao->getSequence ولكنه يستخدم قيمة عشوائية للتعامل مع التصادمات.
إذا كانت قيمة upredictable صحيحة، فإنها تُرجع رقمًا غير متوقع (فهي تقلب بعض الأرقام)
$dao->getSequencePHP() // string(19) "3639032938181434317"
$dao->getSequencePHP(true) // string(19) "1739032938181434311"