php pdo封裝類代碼(支援事務)

來源:互聯網
上載者:User
  1. /**
  2. * PDO資料庫
  3. * @copyright By GOOGLE
  4. */
  5. class pdo_db
  6. {
  7. /**
  8. * PDO執行個體
  9. * @var PDO
  10. */
  11. protected $_db;
  12. /**
  13. * PDO準備語句
  14. * @var PDOStatement
  15. */
  16. protected $_stmt;
  17. /**
  18. * 最後的SQL語句
  19. * @var string
  20. */
  21. protected $_sql;
  22. /**
  23. * 配置資訊 $config=array('dsn'=>xxx,'name'=>xxx,'password'=>xxx,'option'=>xxx)
  24. * @var array
  25. */
  26. protected $_config;
  27. /**
  28. * 建構函式
  29. * @param array $config
  30. */
  31. public function __construct($config)
  32. {
  33. $this->_config = $config;
  34. }
  35. /**
  36. * 串連資料庫
  37. * @return void
  38. */
  39. public function connect()
  40. {
  41. $this->_db = new PDO($this->_config['dsn'], $this->_config['name'], $this->_config['password'], $this->_config['option']);
  42. //預設把結果序列化成stdClass
  43. // $this->_db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
  44. $this->_db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
  45. //自己寫代碼捕獲Exception
  46. $this->_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
  47. }
  48. /**
  49. * 中斷連線
  50. * @return void
  51. */
  52. public function disConnect()
  53. {
  54. $this->_db = null;
  55. $this->_stmt = null;
  56. }
  57. /**
  58. * 執行sql,返回新加入的id
  59. * @param string $statement
  60. * @return string
  61. */
  62. public function exec($statement)
  63. {
  64. if ($this->_db->exec($statement)){
  65. $this->_sql = $statement;
  66. return $this->lastId();
  67. }
  68. $this->errorMessage();
  69. }
  70. /**
  71. * 查詢sql
  72. * @param string $statement
  73. * @return pdo_db
  74. */
  75. public function query($statement)
  76. {
  77. $res = $this->_db->query($statement);
  78. if ($res){
  79. $this->_stmt = $res;
  80. $this->_sql = $statement;
  81. return $this;
  82. }
  83. $this->errorMessage();
  84. }
  85. /**
  86. * 序列化一次資料
  87. * @return mixed
  88. */
  89. public function fetchOne()
  90. {
  91. return $this->_stmt->fetch();
  92. }
  93. /**
  94. * 序列化所有資料
  95. * @return array
  96. */
  97. public function fetchAll()
  98. {
  99. return $this->_stmt->fetchAll();
  100. }
  101. /**
  102. * 最後添加的id
  103. * @return string
  104. */
  105. public function lastId()
  106. {
  107. return $this->_db->lastInsertId();
  108. }
  109. /**
  110. * 影響的行數
  111. * @return int
  112. */
  113. public function affectRows()
  114. {
  115. return $this->_stmt->rowCount();
  116. }
  117. /**
  118. * 預備語句
  119. * @param string $statement
  120. * @return pdo_db
  121. */
  122. public function prepare($statement)
  123. {
  124. $res = $this->_db->prepare($statement);
  125. if ($res){
  126. $this->_stmt = $res;
  127. $this->_sql = $statement;
  128. return $this;
  129. }
  130. $this->errorMessage();
  131. }
  132. /**
  133. * 綁定資料
  134. * @param array $array
  135. * @return pdo_db
  136. */
  137. public function bindArray($array)
  138. {
  139. foreach ($array as $k => $v){
  140. if (is_array($v)){
  141. //array的有效結構 array('value'=>xxx,'type'=>PDO::PARAM_XXX)
  142. $this->_stmt->bindValue($k + 1, $v['value'], $v['type']);
  143. } else{
  144. $this->_stmt->bindValue($k + 1, $v, PDO::PARAM_STR);
  145. }
  146. }
  147. return $this;
  148. }
  149. /**
  150. * 執行預備語句
  151. * @return bool
  152. */
  153. public function execute()
  154. {
  155. if ($this->_stmt->execute()){
  156. return true;
  157. }
  158. $this->errorMessage();
  159. }
  160. /**
  161. * 開啟事務
  162. * @return bool
  163. */
  164. public function beginTransaction()
  165. {
  166. return $this->_db->beginTransaction();
  167. }
  168. /**
  169. * 執行事務
  170. * @return bool
  171. */
  172. public function commitTransaction()
  173. {
  174. return $this->_db->commit();
  175. }
  176. /**
  177. * 復原事務
  178. * @return bool
  179. */
  180. public function rollbackTransaction()
  181. {
  182. return $this->_db->rollBack();
  183. }
  184. /**
  185. * 拋出錯誤
  186. * @throws Error
  187. * @return void
  188. */
  189. public function errorMessage()
  190. {
  191. return;
  192. $msg = $this->_db->errorInfo();
  193. throw new Exception('資料庫錯誤:' . $msg[2]);
  194. }
  195. //---------------------
  196. /**
  197. * 單例執行個體
  198. * @var pdo_db
  199. */
  200. protected static $_instance;
  201. /**
  202. * 預設資料庫
  203. * @static
  204. * @param array $config
  205. * @return pdo_db
  206. */
  207. public static function instance($config)
  208. {
  209. if (!self::$_instance instanceof pdo_db){
  210. self::$_instance = new pdo_db($config);
  211. self::$_instance->connect();
  212. }
  213. return self::$_instance;
  214. }
  215. //----------------------
  216. /**
  217. * 擷取PDO支援的資料庫
  218. * @static
  219. * @return array
  220. */
  221. public static function getSupportDriver(){
  222. return PDO::getAvailableDrivers();
  223. }
  224. /**
  225. * 擷取資料庫的版本資訊
  226. * @return array
  227. */
  228. public function getDriverVersion(){
  229. $name = $this->_db->getAttribute(PDO::ATTR_DRIVER_NAME);
  230. return array($name=>$this->_db->getAttribute(PDO::ATTR_CLIENT_VERSION));
  231. }
  232. }
複製代碼
  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.