您好,登錄后才能下訂單哦!
這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)PHP中怎么使用PDO和消息隊(duì)列,文章內(nèi)容豐富且以專(zhuān)業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
配置文件mysql.ini的內(nèi)容:
[database] driver = mysql host = 127.0.0.1 port = 3306 dbname = mysql username = root password = 1234 [options] PDO::MYSQL_ATTR_INIT_COMMAND = set names utf8
數(shù)據(jù)表文件queue.sql的內(nèi)容:
-- 消息隊(duì)列測(cè)試 -- 商品表 create table goods( id int unsigned primary key auto_increment, goodsname varchar(40) not null comment '商品名', price decimal(9,2) not null comment '價(jià)格', category_id tinyint unsigned not null comment '商品類(lèi)別id', sort tinyint comment '商品排序', description varchar(255) comment '商品描述', remark varchar(255) comment '備注' )engine InnoDB default charset=utf8; insert into goods values(default,'iPhone5s',5999,1,1,'美國(guó)入口貴重電子產(chǎn)品','請(qǐng)多多銷(xiāo)售'),(default,'宏基手提電腦1',4888,3,1,'價(jià)格劃算好電腦',null),(default,'f-30絨衣',200,2,1,'以純白色厚皮羽絨服',null),(default,'n-100鞋子',300,4,1,'Nick品牌',null);
下面是簡(jiǎn)單的消息隊(duì)列實(shí)現(xiàn)PDO商品入庫(kù)的代碼:
鄭重提醒:請(qǐng)認(rèn)真看我的注釋?zhuān)?qǐng)認(rèn)真看我的注釋?zhuān)?qǐng)認(rèn)真看我的注釋。重要的信息要說(shuō)三遍,呵呵!
<?php namespace Home; header('content-type:text/html;charset=utf-8;'); //引入PDO類(lèi) use \PDO; use \PDOStatement; use \PDOException; /*簡(jiǎn)單消息隊(duì)列*/ class Queue{ //容器可以是私有,最好是公有 static public $container=array(); //把PDO對(duì)象存放到屬性中是為了跨方法使用 static private $pdo; //構(gòu)造函數(shù)實(shí)現(xiàn)初始化PDO連接數(shù)據(jù)庫(kù) public function __construct($file = './mysql.ini'){//mysql數(shù)據(jù)庫(kù)的配置文件,./mysql.ini與這個(gè)類(lèi)是同一個(gè)目錄 //parse_ini_file函數(shù)作用,解析并獲取ini文件的參數(shù),加true是二維數(shù)組 $dbini = parse_ini_file($file,true); $driver = $dbini['database']['driver']; //這里的數(shù)據(jù)庫(kù)是mysql的總數(shù)據(jù)庫(kù) $dbname = $dbini['database']['dbname']; $host = $dbini['database']['host']; $port = $dbini['database']['port']; //構(gòu)造PDO連接數(shù)據(jù)庫(kù)的第一個(gè)參數(shù),這個(gè)參數(shù)這么設(shè)置純屬是PDO類(lèi)的語(yǔ)法,不懂的可以百度一下,這里就不做詳解了 $dsn = $driver.':'.'dbname='.$dbname.';host='.$host.';port='.$port; //其他連接數(shù)據(jù)庫(kù)參數(shù) $username = $dbini['database']['username']; $password = $dbini['database']['password']; $options = $dbini['options'];//初始化設(shè)置PDO選項(xiàng) try{ self::$pdo = new PDO($dsn,$username,$password,$options); //設(shè)置PDO屬性。拋出錯(cuò)誤報(bào)告 self::$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); try{ //選擇商品數(shù)據(jù)表所在的數(shù)據(jù)庫(kù) self::$pdo->exec('use queue'); }catch(PDOException $e){ echo $e->getMessage(); } }catch(PDOException $e){ echo $e->getMessage(); } } /* *入列 *$data數(shù)組 *成功返回1,失敗返回false,或者null */ public function _unshift($data =array()){ if(!is_array($data) || empty($data)){return false;} $sql = 'default'; foreach($data as $k=>$v){ $sql .= ',"'.$v.'"'; } //把$data轉(zhuǎn)為sql語(yǔ)句,添加到隊(duì)列容器contain中 $sql = 'insert into goods values('.$sql.')'; return @array_unshift(self::$container,$sql); } /* *出列 *成功返回最后插入的數(shù)據(jù)id *失敗返回失敗信息 */ private static function _pop(){ try{//獲取尾部的sql語(yǔ)句,出列 $sql = array_pop(self::$container); self::$pdo->exec($sql); //把剩余的容器值賦給中間變量 $middle = self::$container; //判斷中間變量是否為空,不為空則繼續(xù)獲取容器尾部的數(shù)據(jù),繼續(xù)出列 while($middle){ $sql = array_pop($middle); self::$pdo->exec($sql); //把數(shù)據(jù)再轉(zhuǎn)給容器,也就是轉(zhuǎn)給while循環(huán)外面的$middle,這樣才能實(shí)現(xiàn)循環(huán),讓容器里面的數(shù)據(jù)全部出列,插入到數(shù)據(jù)庫(kù)中 self::$container = $middle; } //返回的是,最后插入的id,失敗是null return self::$pdo->lastInsertId(); }catch(PDOException $e){ return $e->getMessage(); } } //析構(gòu)函數(shù),對(duì)象回收時(shí)調(diào)用,通過(guò)它實(shí)現(xiàn)自動(dòng)讓容器數(shù)據(jù)入庫(kù) public function __destruct(){ //當(dāng)對(duì)象被回收時(shí),判斷容器是否存在消息,假如存在,則調(diào)用_pop方法,把消息出列 if(self::$container){ self::_pop(); } } }
下面是同一級(jí)目錄下調(diào)用這個(gè)類(lèi)的文件的內(nèi)容,當(dāng)然,你也可以在上面那個(gè)queue類(lèi)的下面調(diào)用_unshift方法實(shí)現(xiàn)消息隊(duì)列的操作
<?php include './queue.php'; use Home\Queue;//引入命名空間的Queue類(lèi) $ob = new Queue; //消息入列 $ob->_unshift(array('goodsname'=>'vivo手機(jī)8888','price'=>1120,'category_id'=>1,'sort'=>1,'description'=>'vivo品牌','remark'=>'好用')); $ob->_unshift(array('goodsname'=>'小米手機(jī)888','price'=>1998,'category_id'=>1,'sort'=>1,'description'=>'小米品牌手機(jī)','remark'=>'國(guó)產(chǎn)好貨')); //之所以打印出來(lái),完成是為了看看效果,至于,有沒(méi)有實(shí)現(xiàn)商品入庫(kù),你得去看看你的數(shù)據(jù)庫(kù)了,呵呵 var_dump(Queue::$container);
上述就是小編為大家分享的PHP中怎么使用PDO和消息隊(duì)列了,如果剛好有類(lèi)似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。