温馨提示:
本文所述内容具有依赖性,可能因软硬条件不同而与预期有所差异,故请以实际为准,仅供参考。
在 PHP 开发中,我们时常会用到数据库,PHP 对数据库连接原生支持 mysql
和 mysqli
两个扩展(Extension),mysql
是 PHP 操作 MySQL 资料库最原始的扩展,mysqli
的 i
代表 Improvement
,提更了相对进阶的功能,就 Extension 而言,本身也增加了安全性;另外,mysql
每次连接都会打开一个连接的进程,而 mysqli
多次运行都将使用同一连接进程,从而减少了服务器的开销,加上新版 PHP 已经逐步取消 mysql
方法,因此mysqli
使用场景会更多。
定义参数
<?php
define('HOST','127.0.0.1');
define('USER','vircloud');
define('PASS','Pass01@');
define('DBNAME','vircloud.net');
?>
连接数据库
<?php
$link = mysqli_connect(HOST,USER,PASS) or die('提示:数据库连接失败!');
?>
选择数据表
<?php
mysqli_select_db($link, DBNAME) or die('提示:无法使用数据表!');
?>
设置编码
<?php
mysqli_set_charset($link, 'utf8');
?>
执行操作
增、删、改、查 操作均可以直接写 SQL 并执行:
<?php
$u_sql = 'select id,quota,download,upload from users where username = \''.$username.'\' ;';
$u_result = mysqli_query($link, $u_sql) or die('获取用户信息失败:'.mysqli_error($link));
?>
判断结果
<?php
if(mysqli_num_rows($u_result) != 0){
$u_row = mysqli_fetch_assoc($u_result);
echo '用户:'.$username.',配额:'.$u_row['quota'];
/*
返回多笔的话可以使用 mysqli_fetch_all() 函数来循环输出
while($u_row = mysqli_fetch_all($u_result,MYSQLI_ASSOC)){
echo '用户:'. $u_row['username'];
echo '配额:'.$u_row['quota'];
}
*/
}else{
echo '查无资料';
}
?>
释放结果集
<?php
mysqli_free_result($u_result);
?>
关闭连接
<?php
mysqli_close($link);
?>
扩展
MySQL 取得资料的三个函数
- fetch_array():将读出的资料同时以数字与栏位名称各自存一次在阵列之中,相当于同一个值会出现两次;
- fetch_assoc():将读出的资料 Key 值设定为该栏位的栏位名称;
- fetch_row():将读出的资料Key值设定为依序下去的数字。
示例
UID | Name | PASSWORD | |
---|---|---|---|
1 | RicharLin | [email protected] | 1234567 |
使用 fetch_array()
array(
[0] => '1'
[UID] => '1'
[1] => 'RicharLin'
[Name] => 'RicharLin'
[2] => '[email protected]'
[EMAIL] => '[email protected]'
[3] => '1234567'
[PASSWORD] => '1234567'
)
使用 fetch_assoc()
array(
[UID] => '1'
[Name] => 'RicharLin'
[EMAIL] => '[email protected]'
[PASSWORD] => '1234567'
)
使用 fetch_row()
array(
[0] => '1'
[1] => 'RicharLin'
[2] => '[email protected]'
[3] => '1234567'
)
总结
其实正常情况下写程式都习惯会用 fetch_array()
,因为它是最通用的使用方式;
但有些时候如果你需要将一大笔输出的资料转换成 JSON 时,fetch_array()
就会显得有点累赘了,使用fetch_assoc()
就可以获得比较精简的资料阵列。
而有些时候如果你需要将输出的阵列依照编号使用时 fetch_row()
也将会是一个很适合的方式,可以轻易的计算数量并且按照数字依序进行,无疑是个不错的选择。