<?php
// 主机名
$db_host = "localhost";
// 端口号
$db_port = "3306";
// 用户名
$db_user = "root";
// 密码
$db_pass = "123456";
// 数据库名
$db_name = "test";
// 字符集
$db_charset = "utf8";
// 1、连接 Mysql 服务器,如果连接成功返回 Mysqli 连接对象,如果失败,则返回 false
if (!$link = @mysqli_connect($db_host.":".$db_port, $db_user, $db_pass)) {
echo "<h2>PHP连接Mysql服务器失败!</h2>";
// 输出错误信息
echo "系统错误信息:".mysqli_connect_error();
// 终止程序 exit() 或 die()
die();
}
echo "<h2>PHP连接Mysql服务器成功!</h2>";
// 2、选择数据库,成功返回 true, 失败返回 false
if (!mysqli_select_db($link, $db_name)) {
echo "<h2>选择{$db_name}失败</h2>";
// 终止程序 exit() 或 die()
die();
}
echo "<h2>选择{$db_name}成功</h2>";
// 3、设置字符集,成功返回 true, 失败返回 false,一般都是成功,没必要判断
mysqli_set_charset($link, $db_charset);
// 4、执行 sql 语句,增删改查
$sql = "select * from user";
// 说明: mysqli_query() 仅对 select、show、describe 语句返回一个 mysqli result 结果集对象,如果查询执行不正确则返回 false。对于其它类型的SQL语句,mysqli_query() 在执行成功时返回 true, 出错时返回 false。非 false 的返回值意味着查询是合法的并能够被服务器执行。
// 注意: 查询字符串不应以分号结束,和命令行模式下有区别。
$result = mysqli_query($link, $sql);
// 输出这种结果集,但是想要获得数据需要用别的方式: object(mysqli_result)#2 (5) { ["current_field"]=> int(0) ["field_count"]=> int(3) ["lengths"]=> NULL ["num_rows"]=> int(4) ["type"]=> int(0) }
var_dump($result);
// 1)、mysqli_fetch_row 从结果集中获取一行数据,并作为枚举数组返回,如果没有更多行则返回 false 。
$arr = mysqli_fetch_row($result);
print_r($arr); // Array ( [0] => 1 [1] => name1 [2] => 18 )
// 再次调用它会自己判断获取下一行数据
$arr = mysqli_fetch_row($result);
print_r($arr); // Array ( [0] => 2 [1] => name2 [2] => 15 )
// 可以直接 while 取出所有数据
while($arr = mysqli_fetch_row($result)) {
print_r($arr);
}
// 2)、(常用方式) mysqli_fetch_assoc 从结果集中获取一行数据,并作为关联数组返回,如果没有更多行则返回 false 。
$arr = mysqli_fetch_assoc($result);
print_r($arr); // Array ( [id] => 1 [name] => name1 [age] => 18 )
// 再次调用它会自己判断获取下一行数据
$arr = mysqli_fetch_assoc($result);
print_r($arr); // Array ( [id] => 2 [name] => name2 [age] => 15 )
// 可以直接 while 取出所有数据
while($arr = mysqli_fetch_assoc($result)) {
print_r($arr);
}
// 3)、mysqli_fetch_array 上面 1 跟 2 的结合体,根据传入不同 $result_type 值获取得到枚举数组或关联数组,如果没有更多行则返回 false 。
// $result_type: MYSQLI_BOTH(两者兼有,默认)、MYSQLI_ASSOC(关联索引)、MYSQLI_NUM(数字索引)
$arr = mysqli_fetch_array($result);
print_r($arr); // Array ( [0] => 1 [id] => 1 [1] => name1 [name] => name1 [2] => 18 [age] => 18 )
$arr = mysqli_fetch_array($result, MYSQLI_ASSOC);
print_r($arr); // Array ( [id] => 2 [name] => name2 [age] => 15 )
$arr = mysqli_fetch_array($result, MYSQLI_NUM);
print_r($arr); // Array ( [0] => 3 [1] => name3 [2] => 20 )
// 4)、mysqli_fetch_all 上面 3 的升级版,从结果集中获取所有行数据作为关联数组、枚举数组、或二者兼有。
// $result_type: MYSQLI_ASSOC(关联索引)、MYSQLI_NUM(数字索引,默认)
$arrs = mysqli_fetch_all($result);
print_r($arrs); // Array ( [0] => Array ( [0] => 1 [1] => name1 [2] => 18 ) [1] => Array ( [0] => 2 [1] => name2 [2] => 15 ) )
$arrs = mysqli_fetch_all($result, MYSQLI_ASSOC);
print_r($arrs); // Array ( [0] => Array ( [id] => 1 [name] => name1 [age] => 18 ) [1] => Array ( [id] => 2 [name] => name2 [age] => 15 ) )
// 4)、mysqli_num_rows 获取结果集中行数量,此命令仅对 select 命令语句有效。
$count = mysqli_num_rows($result);
print_r($count); // 2
// 5)、mysqli_affected_rows 取得前一次 Mysql 操作所影响的记录行数。
// 说明: 取得最近一次与 $link 关联的 select、insert、update、delete 操作所影响的记录行数。
// 注意: 如果最近一次查询失败,函数返回-1,当使用 update 查询,Mysql 不会将原值和新值一样的值更新,返回值不一定就是查询条件所符合的记录,只有修改过的记录数才会被返回。
$count = mysqli_affected_rows($link);
print_r($count); // 2
// 5、手动销毁结果集变量,方便服务器资源循环利用,注意:如果结果集是 Bool 类型是不能进行销毁的,必须为 mysqli result 结果集对象才可以进行销毁,这里可以做下判断
// mysqli_free_result($result);
// 6、如果使用完毕之后,需要关闭数据库连接,以免占用资源
mysqli_close($link);
?>