//初始化数据库连接,并保存到内存以重复利用 function getConnect($db = '') { static $connect; if (!empty($connect) && $connect->ping()) { return $connect; } else if (!empty($connect)) { $connect->close(); } $connect = new mysqli(HOST, USER, PASSWORD, $db, PORT); if ($connect->connect_errno) { die('Failed to connect mysql.' . $connect->connect_error); } $connect->set_charset('utf8'); return $connect; } function selectDb($db) { return getConnect()->select_db($db); } function escapeString($str) { return getConnect()->real_escape_string($str); } $connect = getConnect();//常用属性:affected_rows / insert_id / error //单语句查询 $result = $connect->query($sql = 'select 123'); //fetch_row返回的是索引型数组,fetch_array可返回关联/索引型数组 //fetch_assoc关联型数组, fetch_object返回的是对象 //注意fetch_all是一次性返回所有数据,比前面这些方法更耗内存。 //$result->data_seek($offset)可以跳到指定的行号数据。 while ($row = $result->fetch_row) { echo $row[0], "\n"; } $result->free(); //及时释放结果集是个良好的习惯 //多语句查询 $ret = $connect->multi_query($sql = 'use mydb;select 345;'); if ($ret) { //获取结果需要用到more_results / next_results / use_result do { if ($result = $connect->store_result()) { while ($row = $result->fetch_row()) { printf("%s\n", $row[0]); } $result->free(); if ($connect->more_results()) { printf("The result of next sql:\n"); } } } while ($connect->next_results()); } //预处理 $stmt = $connect->prepare($sql = "select f1, f2 from tbl where f1=? and f2=?"); $stmt->bind_param('ss'/*占位符的类型*/, 'val1', 'val2'); $stmt->execute(); $result = $stmt->get_result(); while ($row = $result->fetch_row()) { printf("%s, %s \n", $row[0], $row[1]); } $result->free(); $stmt->close(); //事务 $connect->autocommit(false); $connect->query($sql1); $result = $connect->query($sql2); if (!$result) { $connect->rollback(); $connect->autocommit(true); } else { $connect->commit(); $connect->autocommit(true); } //关闭数据库连接 $connect->close();