mysqliassocphp
A. php mysqli_fetch_assoc()返回值问题
首先,函数名打错了,是mysql_fetch_array
这函数其实跟mysql_fetch_row功州没能相同橡好,只是返册如纳回值是数组。
你如果print_r出来,一般是这样的:
Array
(
[0] => xxx
[name1] => xxx
[1] => yyy
[name2] => yyy
)
B. php mysqli 列出所有表和字段
$mysqli = new mysqli('localhost','my_user','my_password','world');//连接数据库,需要换成对应的主机名,用户名,密码,数据库名
$result = $mysqli->query('SHOW TABLES');//执行查询语句
$tables=array();
while($arr = $result->fetch_assoc()){
$tables[]=$arr;//遍历查询结果
}
$result = $mysqli->query('DESCRIBE table_name');//table_name 换成你对应的表名
$column=array();
while($arr = $result->fetch_assoc()){
$column[]=$arr;
}
echo '<pre>';
var_mp($tables);//输出所有表
var_mp($column);//输出所有字段
上面的例子没有对应的错误判断,大概思路是这样.
C. PHP使用mysqli扩展连接MySQL数据库
1.面向对象的使用方式
$db
=
new
mysqli('localhost',
'root',
'123456',
'dbname');
如果建立连接时未指定数据库则选择使用的数据库,切换使用的数据库
$db->select_db('dbname');
$query
=
"SELECT
*
FROM
user
WHERE
uid=4";
$result
=
$db->query($query);
$result_num
=
$result->num_rows;
$row
=
$result->fetch_assoc();
//返回一个关联数组,可以通过$row['uid']的方式取得值
$row
=
$result->fetch_row();
//返回一个列举数组,可以通过$row[0]的方式取得值
$row
=
$result->fetch_array();
//返回一个混合数组,可以通过$row['uid']和$row[0]两种方式取得值
$row
=
$result->fetch_object();
//返回一个对象,可以通过$row->uid的方式取得值
$result->free();
//释放结果集
$db->close();
//关闭一个数据库连接,这不是必要的,因为脚本执行完毕时会自动关闭连接
当进行INSERT、UPDATE、DELETE操作时,使用$db->affected_rows查看影响行数
2.面向过程的使用方式
$db
=
mysqli_connect('localhost',
'root',
'123456',
'dbname');
如果建立连接时未指定数据库则选择使用的数据库,切换使用的数据库
mysqli_select_db($db,
'dbname');
查询数据库
$query
=
"SELECT
*
FROM
user
WHERE
uid=4";
$result
=
mysqli_query($db,
$query);
$result_num
=
mysqli_num_rows($result);
返回一行结果
$row
=
mysqli_fetch_assoc($result);
//返回一个关联数组,可以通过$row['uid']的方式取得值
$row
=
mysqli_fetch_row($result);
//返回一个列举数组,可以通过$row[0]的方式取得值
$row
=
mysqli_fetch_array($result);
//返回一个混合数组,可以通过$row['uid']和$row[0]两种方式取得值
$row
=
mysqli_fetch_object($result);
//返回一个对象,可以通过$row->uid的方式取得值
断开数据库连接
mysqli_free_result($result);
//释放结果集
mysqli_close($db);
//关闭一个数据库连接,这不是必要的,因为脚本执行完毕时会自动关闭连接
当进行INSERT、UPDATE、DELETE操作时,使用mysqli_affected_rows()查看影响行数
D. php mysql_fetch_assoc 循环遍历表格
有2个办法,第一种直接使用sql的多表联查,效率高,但是得到的数据table1会被扩展成table2一样的条目数 要再次处理
select*fromtable1a,table2bwherea.orderid=b.orderid
第二种方法,先得到table11的数据,在循环中匹配table2到一个新的列名中
$conn=mysqli_connect("127.0.0.1","root","123","test");
$sql="select*fromtable1";
$rs=mysqli_query($conn,$sql);
$Arr=array();
while($row=mysqli_fetch_assoc($rs)){
$sql="select*fromtable2whereorderid=".$row["orderid"];
$row["order_sku"]=mysqli_fetch_all(mysqli_query($conn,$sql),MYSQLI_ASSOC);
$Arr[]=$row;
}
print_r($Arr)
如果你是刚开始学php 建议直接抛弃mysql用mysqli 因为PHP5.5已经废弃mysql方法了
E. php 函数传递出二维数组
数据库有两条两列记录,为什么 print_r(t()); 只出一条记录。
因为循环里覆盖了。
修改为:$arr[]=$row;
之后怎么把 t() 赋值给$arra,方便这样调用
$arra[0][0] 第一条数据的第一个字段
function t()
{
global $conn;
$result = mysqli_query($conn,"select tn,md from subject ");
return mysqli_fetch_all($result,MYSQLI_NUM);
}
$arra = t();
题外话不建议用MYSQLI_NUM形式,使用MYSQLI_ASSOC会更好。
mysqli_fetch_all($result,MYSQLI_ASSOC);
使用的时候:
$arra[0]['tn']
F. php中mysqli处理查询结果集的几个方法
$sql="select * from user"; $result=$link->query($sql); $row=$result->fetch_all(MYSQLI_BOTH);//参数MYSQL_ASSOC、MYSQLI_NUM、MYSQLI_BOTH规定产生数组类型
$n=0; while($n<mysqli_num_rows($result)){ echo "ID:".$row[$n]["id"]."用户名:".$row[$n]["name"]."密码:".$row[$n]["password"]."<br />"; $n++;
}