English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
هذا المقال يلخص عمليات تحكم قاعدة بيانات Zend Framework. يُشارك معكم للاستفادة، ويكون كما يلي:
معرفة قاعدة بيانات Zend_Db
مثال:
ملف نموذج:
$this->fetchAll("is_jian=1","id DESC",0,2)->toArray(); // حسب is_jian=1، قم بترتيب البيانات بناءً على id في ترتيب تنازلي. إذا كان الأولامر null، فترتيب id تنازلي ASC هو الترتيب الإيجابي.
ملف مسار:
$video = new Video(); // إنشاء كائن للفئة قاعدة البيانات $this->view->get2Video = $video->get2Video(); // تحصل على بيانات التوصيات على الصفحة الرئيسية 2
ملف index.phtml:
<?php foreach ($this->get2Video as $video): ?> <?=$video['id']; ?> <?=$video['name']; ?> <? endforeach; ?>
إضافة الأقواس لمنع الهجمات على قاعدة البيانات
استخدام quote
$value = $db->quote('St John"s Wort'); // $value الآن أصبح ' "St John\"s Wort" ' (اتجنب الأقواس المزدوجة في كل من البداية والنهاية) // إضافة قوائم إلى الأعداد $value = $db->quote(array('a', 'b', 'c')); // $value الآن أصبح ' "a", "b", "c" ' (مفصولة بفاصلة)
استخدام quoteInto
echo $where = $db->quoteInto('id = ?', 1); // $where الآن هو 'id = "1"' (اتجنب الأقواس المزدوجة في كل من البداية والنهاية) // إضافة قوائم إلى جملة where $where = $db->quoteInto('id IN(?)', array(1, 2, 3)); // $where الآن هو 'id IN("1", "2", "3")' (قائمة بجملة مفتوحة بفاصلة)
(1) تلخيص استعلام البيانات
إجراء استعلام مباشر. (استخدام جملة SQL كاملة)
//function quoteInto($text, $value, $type = null, $count = null) $db = $this->getAdapter(); $sql = $db->quoteInto('SELECT * FROM `m_video` WHERE `is_guo` =?', '1'); $result = $db->query($sql); // استخدم كائن PDOStatement $result لوضع جميع بيانات النتائج في مجموعة $videoArray = $result->fetchAll();
استخدام fetchAll
fetchAll($where = null, $order = null, $count = null, $offset = null)
استرجاع قيم جميع الحقول في مجموعة النتائج كعدد متسلسل، إذا لم يتم تعيين المعامل فيجب كتابته كـnull
يمكن استرجاع مجموعة النتائج المحددة
$videoArray=$this->fetchAll("is_jian=1 and is_guo=1","id DESC",0,2)->toArray();
استخدام fetchAssoc
fetchAssoc($sql, $bind = array())
استرجاع قيم جميع الحقول في المجموعة الناتجة،مقتبسة كمجموعة مرتبطة،الحقل الأول كرمز
$db = $this->getAdapter(); $videoArray=$db->fetchAssoc("SELECT * FROM m_video WHERE `is_jian` = :title",array('title' => '1'));
استخدام fetchCol
fetchCol($sql, $bind = array())
استرجاع اسم الحقل الأول من جميع السطور الناتجة
$db = $this->getAdapter(); $videoArray=$db->fetchCol("SELECT name FROM m_video WHERE `is_jian` = :title",array('title' => '1'));
استخدام fetchOne
fetchOne($sql, $bind = array())
استرجاع فقط قيمة الحقل الأول
$db = $this->getAdapter(); echo $videoArray=$db->fetchOne("SELECT count(*) FROM m_video WHERE `is_jian` = :title",array('title' => '1'));
استخدام fetchPairs
fetchPairs($sql, $bind = array())
استرجاع مجموعة مرتبطة واحدة،قيمة الحقل الأول كرمز(id)،والحقل الثاني كقيمة(name)
يُرجع: Array( [1] => 十二生肖奇缘 [2] => 桃花运),1,2:يدلان على حقل id.
$db = $this->getAdapter(); $videoArray=$db->fetchPairs("SELECT id, name FROM m_video WHERE is_jian = :title",array('title' => '1'));
استخدام fetchRow
fetchRow($where = null, $order = null)
استرجاع فقط السطر الأول من المجموعة الناتجة
$videoArray=$this->fetchRow("is_jian=1 and is_guo=1", 'id DESC')->toArray();
استخدام query
//function query($sql, $bind = array()) $db = $this->getAdapter(); $result = $db->query('SELECT * FROM `m_video`'); // $result = $db->query('SELECT * FROM `m_video` WHERE `name` = ? AND id = ?',array('十二生肖奇缘', '1')); // $result->setFetchMode(Zend_Db::FETCH_OBJ); // FETCH_OBJ هو القيمة الافتراضية، FETCH_NUM، FETCH_BOTH // while ($row = $result->fetch()) { // echo $row['name']; //} // $rows = $result->fetch(); // $rows = $result->fetchAll(); // $obj = $result->fetchObject(); // echo $obj->name; // echo $Column = $result->fetchColumn(0); // الحصول على أول حقل في مجموعة النتائج، مثل 0 هو رقم id، يستخدم فقط للحصول على حقل واحد print_r($rows);
استخدام select
$db = $this->getAdapter(); $select = $db->select(); $select->from('m_video', array('id','name','clicks')) ->where('is_guo = :is_guo and name = :name') ->order('name') // كيفية ترتيب القائمة، يمكن أن تكون قائمة (عدة حقول) أو نص (حقل واحد) ->group() // تجميع ->having() // شرط التجميع لاستعلام التجميع ->distinct() // لا يحتوي على معلمات، يزيل القيم المكررة. في بعض الأحيان تكون النتائج مشابهة لتلك التي تعود من groupby ->limit(10); // قراءة النتائج باستخدام المعلمات الم绑定 $params = array('is_guo' => '1','name'=>'十二生肖奇缘'); //$sql = $select->__toString(); // الحصول على جملة الاستعلام، يمكن استخدامها للتحقق من صحة الكود $result = $db->fetchAll($select,$params); تنفيذ استعلام select $stmt = $db->query($select); $result = $stmt->fetchAll();
或用
$stmt = $select->query(); $result = $stmt->fetchAll();
如果直接用;
$db->fetchAll($select);
结果一样;
多表联合查询用法;
$db = $this->getAdapter(); $select = $db->select(); $select->from('m_video', array('id','name','pic','actor','type_id','up_time')); ->where('is_guo = :is_guo and is_jian = :is_jian'); ->order('up_time'); ->limit(2); $params = array('is_guo' => '1','is_jian'=>'1'); $select->join('m_type', 'm_video.type_id = m_type.t_id', 'type_name'); //多表联合查询 $videoArray = $db->fetchAll($select,$params);
find()方法,可以使用主键值在表中检索数据.
// SELECT * FROM round_table WHERE id = "1"; $row = $table->find(1); // SELECT * FROM round_table WHERE id IN("1", "2", 3); $rowset = $table->find(array(1, 2, 3));
(2)数据删除总结;
第一种方法:可以删任意表;
//quoteInto($text, $value, $type = null, $count = null); $table = 'm_video'; // 设定需要删除数据的表; $db = $this->getAdapter(); $where = $db->quoteInto('name = ?', 'ccc'); // 删除数据的where条件语句; echo $rows_affected = $db->delete($table, $where); // 删除数据并得到影响的行数;
第二种方法:只能删除本表中的;
//delete用法; // delete($where); $where = ";name = 'bbb';"; echo $this->delete($where);// 删除数据并得到影响的行数
(3)数据更新总结
第一种方法:可以更新任意表
// 以"列名"=>"数据"的格式构造更新数组,更新数据行 $table = 'm_video';// 更新的数据表 $db = $this->getAdapter(); $set = array ( 'name' => '蝶影重重', 'clicks' => '888', ); $where = $db->quoteInto('id = ?', '10');// where语句 // 更新表数据,返回更新的行数 echo $rows_affected = $db->update($table, $set, $where);
第二种方法:只能更新本表中的
$set = array ( 'name' => '蝶影重重22', 'clicks' => '8880', ); $db = $this->getAdapter(); $where = $db->quoteInto('id = ?', '10');// where语句 $rows_affected = $this->update($set, $where);// 更新表数据,返回更新的行数
(4)数据插入总结
第一种方法:可以在任意表中插入数据
$table = 'm_gao';// 插入数据的数据表 $db = $this->getAdapter(); // 以"列名"=>"数据"的格式格式构造插入数组,插入数据行 $row = array ( 'title' => '大家好。111', 'content' => '影视网要改成用zend framework开发啊', 'time' => '2009-05-04 17:23:36', ); // إدراج سطر البيانات وعدد السطور المدرجة $rows_affected = $db->insert($table, $row); // id الم插入 الأخير echo $last_insert_id = $db->lastInsertId(); $row=array( 'name'=>'curdate()', 'address' => new Zend_Db_Expr ('curdate()') )
这样子字段name会插入一个curdate()的字符串,而address插入一个时间值(curdate()的结果2009-05-09)
第二种方法:只能适合本表中的还没有总结出来
(5)事务处理
$table = 'm_gao';// 插入数据的数据表 $db = $this->getAdapter(); $db->beginTransaction();//Zend_Db_Adapter会回到自动commit模式下,直到你再次调用beginTransaction()方法 // 以"列名"=>"数据"的格式格式构造插入数组,插入数据行 $row = array ( 'id'=null, 'title' => '大家好。111', 'content' => '影视网要改成用zend framework开发啊', 'time' => '2009-05-04 17:23:36', ); try { // إدراج سطر البيانات وعدد السطور المدرجة $rows_affected = $db->insert($table, $row); // id الم插入 الأخير $last_insert_id = $db->lastInsertId(); $db->commit(); // إكمال المعاملة } $db->rollBack(); echo 'التقاطع الاستثنائية: '.$e->getMessage(); // طباعة معلومات الاستثنائية } echo $last_insert_id;
(6) آخر
$db = $this->getAdapter(); $tables = $db->listTables(); // قائمة على جميع الجداول في قاعدة البيانات الحالية $fields = $db->describeTable('m_video'); // قائمة على حالة الأعمدة في الجدول
بالنسبة للقراء المهتمين بمزيد من المعلومات حول Zend، يمكنهم مراجعة مواضيع هذا الموقع: 'تعليم Zend Framework من البداية'، 'تقييم أفضل إطارات العمل PHP'، 'تعليم Yii وطرق الاستخدام الشائعة'، 'تعليم ThinkPHP'، 'تعليم تصميم البرامج الموجهة نحو الكائنات PHP'، 'تعليم عمليات التفاعل مع قاعدة البيانات MySQL'، و 'تجميع تقنيات التفاعل مع قاعدة البيانات الشائعة في PHP'.
آمل أن يساعدك محتوى هذا المقال في تصميم برامج PHP الخاصة بك بناءً على إطار العمل Zend Framework.
بيان: محتوى هذا المقال تم جمعه من الإنترنت، ويتمتع المالك الأصلي بحقوق الطبع والنشر، ويتم جمع المحتوى من قبل المستخدمين على الإنترنت الذين يقدمون المساهمات بشكل تلقائي، ويتم تحميل المحتوى على هذا الموقع دون امتلاك حقوق الملكية، ولا يتم تعديل المحتوى بشكل يدوي، ولا يتحمل هذا الموقع أي مسؤولية قانونية. إذا كنت قد وجدت محتوى يشتبه في انتهاك حقوق النسخ، فيرجى إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (عند إرسال البريد الإلكتروني، يرجى استبدال # ب @) للإبلاغ، وتقديم الدليل، وسيتم حذف المحتوى المزعوم عن انتهاك حقوق النسخ على الفور إذا تم التحقق من صحة المعلومات.