下面来给各位同这介绍一个mysql PDO 操作类例子,希望些文章对大家会带来帮助,文章是转朋友的自己没写.
介绍:1、只有在执行select、update、delete、insert等操作时才会连接数据库,2、采用PDO预处理方式,3、事务处理,4、错误输出.
php代码如下:
- <?php
- /**
- *mysqlPDO操作类
- *CreatedbyPhpStorm.
- *User:sumiaowen
- *Date:14-3-12
- *Time:下午4:57
- *TochangethistemplateuseFile|Settings|FileTemplates.
- */
- classMyMysql
- {
- //pdo链接mysqldns
- static$dns=null;
- //mysql用户名
- static$username=null;
- //mysql密码
- static$password=null;
- //pdo链接实例
- static$pdo=null;
- //调试
- public$debug=null;
- //开始事务
- private$_begin_transaction=false;
- /**
- *@parambool$debug是否开启调试,错误信息输出
- *@paramstring$database数据库类别
- */
- publicfunction__construct($debug=true,$database='default')
- {
- $this->debug=$debug;
- self::$dns=Yaf_Registry::get('config')->db->$database->dns;
- self::$username=Yaf_Registry::get('config')->db->$database->username;
- self::$password=Yaf_Registry::get('config')->db->$database->password;
- }
- /**
- *PDO对象实例化
- *@returnnull|PDO
- */
- staticfunctioninstance()
- {
- if(is_null(self::$pdo))
- {
- try
- {
- self::$pdo=newPDO(self::$dns,self::$username,self::$password);
- self::$pdo->query('setnamesutf8');
- }
- catch(PDOException$e)
- {
- exit('PDOException:'.$e->getMessage());
- }
- }
- returnself::$pdo;
- }
- /**
- *预处理执行selectsql语句
- *@paramstring$sql
- *@paramarray$parameters
- *@paramint$option
- *@returnarray
- */
- publicfunctionquery($sql,$parameters=array(),$option=PDO::FETCH_ASSOC)
- {
- self::$pdo||self::instance();
- $stmt=self::$pdo->prepare($sql);
- $stmt->execute($parameters);
- $tmp=array();
- while($row=$stmt->fetch($option))
- {
- $tmp[]=$row;
- }
- if($this->debug)
- {
- $this->error($stmt);
- }
- return$tmp;
- }
- /**
- *预处理执行update、delete、insertSQL语句
- *@paramsting$sql
- *@paramarray$parameters
- *@returnint返回影响行数
- */
- publicfunctionexecute($sql,$parameters=array())
- {
- self::$pdo||self::instance();
- $stmt=self::$pdo->prepare($sql);
- $stmt->execute($parameters);
- if($this->debug)
- {
- $this->error($stmt);
- }
- return$stmt->rowCount();
- }
- /**
- *执行一条SQL语句
- *@paramstring$sql
- *@returnint返回影响行数
- */
- publicfunctionexec($sql)
- {
- self::$pdo||self::instance();
- $rows=self::$pdo->exec($sql);
- if($this->debug)
- {
- $this->error();
- }
- return$rows;
- }
- /**
- *添加一条记录
- *@paramstring$tableName数据库表名
- *@paramarray$data需要添加的数据,一个key|value对应的数组,其中key为表字段名称,value为插入的值,如:$data=array('keyword'=>'关键词')
- *@returnint返回插入行的ID
- */
- publicfunctioninsert($tableName,$data)
- {
- self::$pdo||self::instance();
- $fields='`'.implode('`,`',array_keys($data)).'`';
- $values="'".implode("','",$data)."'";
- $sql="INSERTINTO`{$tableName}`({$fields})VALUES({$values})";
- self::$pdo->exec($sql);
- if($this->debug)
- {
- $this->error();
- }
- return$this->getLastInsertId();
- }
- /**
- *添加多条数据
- *@paramstring$tableName数据库表名
- *@paramarray$data需要添加的数据,为一个二维数组,如:$data=array(array('fileld1'=>'value1','fileld2'=>'value2'),array('fileld1'=>'value1','fileld2'=>'value2'))
- *@returnint返回影响行数
- */
- publicfunctioninsertBatch($tableName,$data)
- {
- self::$pdo||self::instance();
- $fields='`'.implode('`,`',array_keys($data[0])).'`';
- $tmp=array();
- foreach($dataas$value)
- {
- $tmp[]="'".implode("','",$value)."'";
- }
- $values="(".implode("),(",$tmp).")";
- $sql="INSERTINTO`{$tableName}`({$fields})VALUES{$values}";
- $rows=self::$pdo->exec($sql);
- if($this->debug)
- {
- $this->error();
- }
- return$rows;
- }
- /**
- *根据主键更新数据
- *@paramstring$tableName数据库表名
- *@paramarray$where更新条件,为key|value对应的数组,如:array('id'=>233)
- *@paramarray$data更新数据,为key|value对应的数组,如:array('field1'=>'value1','field12'=>'value2')
- *@returnint成功返回影响行数,失败返回错误信息
- */
- publicfunctionupdateByPrimaryKey($tableName,$where,$data)
- {
- self::$pdo||self::instance();
- //条件
- $whereId=array_keys($where);
- $whereValue=array_values($where);
- $tmp=array();
- foreach($dataas$key=>$value)
- {
- $tmp[]="`{$key}`='{$value}'";
- }
- $data=implode(',',$tmp);
- $sql="UPDATE`{$tableName}`SET{$data}WHERE`{$whereId[0]}`='{$whereValue[0]}'";
- $rows=self::$pdo->exec($sql);
- if($this->debug)
- {
- $this->error();
- }
- return$rows;
- }
- /**
- *根据主键删除数据
- *@paramstring$tableName数据库表名
- *@paramarray$where删除条件,为key|value对应的数组,如:array('id'=>233)
- *@returnint成功返回影响行数,失败返回错误信息
- */
- publicfunctiondeleteByPrimaryKey($tableName,$where)
- {
- self::$pdo||self::instance();
- //条件
- $whereId=array_keys($where);
- $whereValue=array_values($where);
- $sql="DELETEFROM`{$tableName}`WHERE`{$whereId[0]}`='{$whereValue[0]}'";
- $rows=self::$pdo->exec($sql);
- if($this->debug)
- {
- $this->error();
- }
- return$rows;
- }
- /**
- *返回最后插入行的ID或序列值
- *@returnint
- */
- publicfunctiongetLastInsertId()
- {
- self::$pdo||self::instance();
- returnself::$pdo->lastInsertId();
- }
- /**
- *设置错误信息
- */
- publicfunctionerror($stmt='')
- {
- $error=$stmt?$stmt->errorInfo():self::$pdo->errorInfo();
- $msg="SQLSTATE:{$error[0]}";
- if($error[1])
- {
- $msg.="-ERRORCODE:{$error[1]}";
- }
- if($error[2])
- {
- $msg.="-ERROR:{$error[2]}";
- }
- if($error[1]||$error[2])
- {
- exit($msg);
- }
- }
- /**
- *事务开始
- *@returnbool
- */
- publicfunctionbegin()
- {
- self::$pdo||self::instance();
- //已经有事务,退出事务
- $this->rollback();
- if(!self::$pdo->beginTransaction())
- {
- returnfalse;
- }
- return$this->_begin_transaction=true;
- }
- /**
- *事务提交
- *@returnbool
- */
- publicfunctioncommit()
- {
- if($this->_begin_transaction)
- {
- $this->_begin_transaction=false;
- self::$pdo->commit();
- }
- returntrue;
- }
- /**
- *事务回滚
- *@returnbool
- */
- publicfunctionrollback()
- {
- if($this->_begin_transaction)
- {
- $this->_begin_transaction=false;
- self::$pdo->rollback();
- }//开源代码phpfensi.com
- returnfalse;
- }
- /**
- *关闭链接
- */
- publicfunctionclose()
- {
- self::$pdo=null;
- }
- }
- ?>