写在最前面:这篇文章只整理mysqli编程最基础、最实用的代码片段,不完整整理mysqli的所有功能函数。
一 . 为什么用mysqli作为php使用MySQL的API
MySQL官方文档上面是这么说的:
php提供三种不同的API接口
1.original mysql API:支持PHP4和5,它支持MYSQL4.1.3之前的版本,使用时需要注意配置MYSQL server的认证相关项,4.1.3之后的版本也可以用,但是server的一些功能可能不能用;
2.mysql improved extension:这个扩展支持PHP5.0以上,使用MYSQL4.1.1以后的版本。
3.mysql function(PDO_MYSQL):不是它自己的API,是PDO function 的一部分,并为MYSQL特别做的接口;
官网文档推荐使用mysqli或者PDO_MYSQL
安装mysqli扩展的方法网上文章一大堆,而且安装方法有多种,这里不再一一列举(其实我只懂其中一二种,这不是我的重点)。
下面说说怎么检测mysqli扩展是否已经安装
这些函数都可以用来检测:
var_dump(extension_loaded('mysqli'));
function_exists('mysqli_connect');
get_loaded_extensions();
二 . mysqli连接数据库
最简单实用的代码如下:
$mysqli = new mysqli('url','mysql_username','mysql_password','database_name');
if($mysqli->connect_errno){
echo "Connect error : " . $mysqli->connect_error;
}
$mysqli->set_charset("utf8");
//使用结束
$mysqli->close();
上面返回的$mysqli对象,其中包含了很多属性,如果没有错误,用print_r()打印出来是这样的:
mysqli Object
(
[affected_rows] => 0
[client_info] => 5.5.46
[client_version] => 50546
[connect_errno] => 0
[connect_error] =>
[errno] => 0
[error] =>
[error_list] => Array
(
)
[field_count] => 0
[host_info] => Localhost via UNIX socket
[info] =>
[insert_id] => 0
[server_info] => 5.5.44-0+deb7u1
[server_version] => 50544
[stat] => Uptime: 191693 Threads: 1 Questions: 188 Slow queries: 0 Opens: 53 Flush tables: 1 Open tables: 46 Queries per second avg: 0.000
[sqlstate] => 00000
[protocol_version] => 10
[thread_id] => 56
[warning_count] => 0
)
$mysqli对象的方法(更详细内容后续加载):
echo $mysqli->get_client_info();
三 . 使用mysqli执行SQL语句(总原则)
把握这一个原则:
mysqli执行SQL语句的返回结果有两种:
1.当SELECT/DESC/DESCRIBE/SHOW/EXPLAIN执行成功,则返回mysqli_result对象,失败则返回false。
2.对于其他SQL语句的执行,则返回true or false.
注:不包括预处理语句
mysqli_result对象用print_r()打印出来是这样:
mysqli_result Object
(
[current_field] => 0
[field_count] => 4
[lengths] =>
[num_rows] => 1
[type] => 0
)
把握这第二个原则:
$mysqli->errno 和 $mysqli->error 是执行SQL语句产的错误编号和错误信息,每次执行完SQL语句后可以使用这两个参数查看是否出错。
$mysqli->insert_id 和 $mysqli->affected_rows 这两个后续再加上详细。
四 . 使用mysqli执行SQL查询语句
分为两种情况
4.1 使用mysqlnd库
代码如下:
$sql = "SELECT * FROM user";
$mysqli_result = $mysqli->query($sql);
//获取结果集中的所有数据,默认返回二维数组,一维是行,二位是数据
//fetch_all()默认参数是MYSQLI_NUM,即返回索引数组
//参数MYSQLI_ASSOC,则返回关联数组
//fetch_all()只能用于mysqlnd库
$rows = $mysqli_result->fetch_all();
//使用完后释放结果集,或者$mysqli->result->free();
$mysqli_result->close();
4.2 如果没有mysqlnd库
代码如下:
$sql = "SELECT * FROM user";
$mysqli_result = $mysqli->query($sql);
//获取一行数据,还可以使用fetch_assoc(),得到一行的关联数组形式
//fetch_object()
//mysqli_result->data_seek(0);移动数据指针
while($row = $mysqli_result->fetch_row()){
$rows[] = $row;
}
//使用完后释放结果集,或者$mysqli->result->free();
$mysqli_result->close();
//测试输出这个二位数组,类似4.1
print_r($rows);