mysql PDO 操作类的例子

互联网十八般武艺 互联网十八般武艺

下面来给各位同这介绍一个mysql PDO 操作类例子,希望些文章对大家会带来帮助,文章是转朋友的自己没写.

介绍:1、只有在执行select、update、delete、insert等操作时才会连接数据库,2、采用PDO预处理方式,3、事务处理,4、错误输出.

php代码如下:

  1. <?php
  2. /**
  3. *mysqlPDO操作类
  4. *CreatedbyPhpStorm.
  5. *User:sumiaowen
  6. *Date:14-3-12
  7. *Time:下午4:57
  8. *TochangethistemplateuseFile|Settings|FileTemplates.
  9. */
  10. classMyMysql
  11. {
  12. //pdo链接mysqldns
  13. static$dns=null;
  14. //mysql用户名
  15. static$username=null;
  16. //mysql密码
  17. static$password=null;
  18. //pdo链接实例
  19. static$pdo=null;
  20. //调试
  21. public$debug=null;
  22. //开始事务
  23. private$_begin_transaction=false;
  24. /**
  25. *@parambool$debug是否开启调试,错误信息输出
  26. *@paramstring$database数据库类别
  27. */
  28. publicfunction__construct($debug=true,$database='default')
  29. {
  30. $this->debug=$debug;
  31. self::$dns=Yaf_Registry::get('config')->db->$database->dns;
  32. self::$username=Yaf_Registry::get('config')->db->$database->username;
  33. self::$password=Yaf_Registry::get('config')->db->$database->password;
  34. }
  35. /**
  36. *PDO对象实例化
  37. *@returnnull|PDO
  38. */
  39. staticfunctioninstance()
  40. {
  41. if(is_null(self::$pdo))
  42. {
  43. try
  44. {
  45. self::$pdo=newPDO(self::$dns,self::$username,self::$password);
  46. self::$pdo->query('setnamesutf8');
  47. }
  48. catch(PDOException$e)
  49. {
  50. exit('PDOException:'.$e->getMessage());
  51. }
  52. }
  53. returnself::$pdo;
  54. }
  55. /**
  56. *预处理执行selectsql语句
  57. *@paramstring$sql
  58. *@paramarray$parameters
  59. *@paramint$option
  60. *@returnarray
  61. */
  62. publicfunctionquery($sql,$parameters=array(),$option=PDO::FETCH_ASSOC)
  63. {
  64. self::$pdo||self::instance();
  65. $stmt=self::$pdo->prepare($sql);
  66. $stmt->execute($parameters);
  67. $tmp=array();
  68. while($row=$stmt->fetch($option))
  69. {
  70. $tmp[]=$row;
  71. }
  72. if($this->debug)
  73. {
  74. $this->error($stmt);
  75. }
  76. return$tmp;
  77. }
  78. /**
  79. *预处理执行update、delete、insertSQL语句
  80. *@paramsting$sql
  81. *@paramarray$parameters
  82. *@returnint返回影响行数
  83. */
  84. publicfunctionexecute($sql,$parameters=array())
  85. {
  86. self::$pdo||self::instance();
  87. $stmt=self::$pdo->prepare($sql);
  88. $stmt->execute($parameters);
  89. if($this->debug)
  90. {
  91. $this->error($stmt);
  92. }
  93. return$stmt->rowCount();
  94. }
  95. /**
  96. *执行一条SQL语句
  97. *@paramstring$sql
  98. *@returnint返回影响行数
  99. */
  100. publicfunctionexec($sql)
  101. {
  102. self::$pdo||self::instance();
  103. $rows=self::$pdo->exec($sql);
  104. if($this->debug)
  105. {
  106. $this->error();
  107. }
  108. return$rows;
  109. }
  110. /**
  111. *添加一条记录
  112. *@paramstring$tableName数据库表名
  113. *@paramarray$data需要添加的数据,一个key|value对应的数组,其中key为表字段名称,value为插入的值,如:$data=array('keyword'=>'关键词')
  114. *@returnint返回插入行的ID
  115. */
  116. publicfunctioninsert($tableName,$data)
  117. {
  118. self::$pdo||self::instance();
  119. $fields='`'.implode('`,`',array_keys($data)).'`';
  120. $values="'".implode("','",$data)."'";
  121. $sql="INSERTINTO`{$tableName}`({$fields})VALUES({$values})";
  122. self::$pdo->exec($sql);
  123. if($this->debug)
  124. {
  125. $this->error();
  126. }
  127. return$this->getLastInsertId();
  128. }
  129. /**
  130. *添加多条数据
  131. *@paramstring$tableName数据库表名
  132. *@paramarray$data需要添加的数据,为一个二维数组,如:$data=array(array('fileld1'=>'value1','fileld2'=>'value2'),array('fileld1'=>'value1','fileld2'=>'value2'))
  133. *@returnint返回影响行数
  134. */
  135. publicfunctioninsertBatch($tableName,$data)
  136. {
  137. self::$pdo||self::instance();
  138. $fields='`'.implode('`,`',array_keys($data[0])).'`';
  139. $tmp=array();
  140. foreach($dataas$value)
  141. {
  142. $tmp[]="'".implode("','",$value)."'";
  143. }
  144. $values="(".implode("),(",$tmp).")";
  145. $sql="INSERTINTO`{$tableName}`({$fields})VALUES{$values}";
  146. $rows=self::$pdo->exec($sql);
  147. if($this->debug)
  148. {
  149. $this->error();
  150. }
  151. return$rows;
  152. }
  153. /**
  154. *根据主键更新数据
  155. *@paramstring$tableName数据库表名
  156. *@paramarray$where更新条件,为key|value对应的数组,如:array('id'=>233)
  157. *@paramarray$data更新数据,为key|value对应的数组,如:array('field1'=>'value1','field12'=>'value2')
  158. *@returnint成功返回影响行数,失败返回错误信息
  159. */
  160. publicfunctionupdateByPrimaryKey($tableName,$where,$data)
  161. {
  162. self::$pdo||self::instance();
  163. //条件
  164. $whereId=array_keys($where);
  165. $whereValue=array_values($where);
  166. $tmp=array();
  167. foreach($dataas$key=>$value)
  168. {
  169. $tmp[]="`{$key}`='{$value}'";
  170. }
  171. $data=implode(',',$tmp);
  172. $sql="UPDATE`{$tableName}`SET{$data}WHERE`{$whereId[0]}`='{$whereValue[0]}'";
  173. $rows=self::$pdo->exec($sql);
  174. if($this->debug)
  175. {
  176. $this->error();
  177. }
  178. return$rows;
  179. }
  180. /**
  181. *根据主键删除数据
  182. *@paramstring$tableName数据库表名
  183. *@paramarray$where删除条件,为key|value对应的数组,如:array('id'=>233)
  184. *@returnint成功返回影响行数,失败返回错误信息
  185. */
  186. publicfunctiondeleteByPrimaryKey($tableName,$where)
  187. {
  188. self::$pdo||self::instance();
  189. //条件
  190. $whereId=array_keys($where);
  191. $whereValue=array_values($where);
  192. $sql="DELETEFROM`{$tableName}`WHERE`{$whereId[0]}`='{$whereValue[0]}'";
  193. $rows=self::$pdo->exec($sql);
  194. if($this->debug)
  195. {
  196. $this->error();
  197. }
  198. return$rows;
  199. }
  200. /**
  201. *返回最后插入行的ID或序列值
  202. *@returnint
  203. */
  204. publicfunctiongetLastInsertId()
  205. {
  206. self::$pdo||self::instance();
  207. returnself::$pdo->lastInsertId();
  208. }
  209. /**
  210. *设置错误信息
  211. */
  212. publicfunctionerror($stmt='')
  213. {
  214. $error=$stmt?$stmt->errorInfo():self::$pdo->errorInfo();
  215. $msg="SQLSTATE:{$error[0]}";
  216. if($error[1])
  217. {
  218. $msg.="-ERRORCODE:{$error[1]}";
  219. }
  220. if($error[2])
  221. {
  222. $msg.="-ERROR:{$error[2]}";
  223. }
  224. if($error[1]||$error[2])
  225. {
  226. exit($msg);
  227. }
  228. }
  229. /**
  230. *事务开始
  231. *@returnbool
  232. */
  233. publicfunctionbegin()
  234. {
  235. self::$pdo||self::instance();
  236. //已经有事务,退出事务
  237. $this->rollback();
  238. if(!self::$pdo->beginTransaction())
  239. {
  240. returnfalse;
  241. }
  242. return$this->_begin_transaction=true;
  243. }
  244. /**
  245. *事务提交
  246. *@returnbool
  247. */
  248. publicfunctioncommit()
  249. {
  250. if($this->_begin_transaction)
  251. {
  252. $this->_begin_transaction=false;
  253. self::$pdo->commit();
  254. }
  255. returntrue;
  256. }
  257. /**
  258. *事务回滚
  259. *@returnbool
  260. */
  261. publicfunctionrollback()
  262. {
  263. if($this->_begin_transaction)
  264. {
  265. $this->_begin_transaction=false;
  266. self::$pdo->rollback();
  267. }//开源代码phpfensi.com
  268. returnfalse;
  269. }
  270. /**
  271. *关闭链接
  272. */
  273. publicfunctionclose()
  274. {
  275. self::$pdo=null;
  276. }
  277. }
  278. ?>

相关广告
  • mysql PDO 操作类的例子 mysql PDO 操作类的例子 mysql PDO 操作类的例子
相关阅读

mysql PDO 操作类的例子

2019/10/10 17:37:20 | 谷歌SEO算法 | 1号店SEO