php连接并简单操作数据库(1
php连接数据库
连库基本操作
首先找到php.ini 文件中的这部分代码,去掉这两行开头原有的’;’,意味着使用这个“php_mysqli.dll”拓展功能。至于上面的"php_mysql.dll"为什么也要使用,是顺便加的-_-,强迫症犯了。
连接数据库
<?php
header('Content-type:text/html;charset=utf-8');
echo '<pre>';
//php操作数据库的基本连接操作
//建立连接
$link = @mysqli_connect('localhost:3306','root','t123456789');//默认$link为超全局
if(mysqli_connect_errno()){
//连接错误的提示
var_dump(mysqli_connect_error());
}
//这部分就可以写执行数据库操作的代码了
//关闭数据库的连接
mysqli_close($link);
这样就php成功建立了与mysql的连接
在php中执行第一条mysql语句
php连接数据库,并向其中某个表添加一行。下面代码中出现的数据库和表需要提前建好,就不解释了。奇怪的是,编码格式必须改成gbk,不然在向数据库插入中文字段时会出错,详见下面代码注释解释。
<?php
header('Content-type:text/html;charset=gbk');//这里改成gbk了,为了和下面选择数据库编码同步
echo '<pre>';
//php操作数据库的基本连接操作
//建立连接
$link = @mysqli_connect('localhost:3306','root','t123456789');//默认$link为超全局
if(mysqli_connect_errno()){
//连接错误的提示
var_dump(mysqli_connect_error());
}
//选择数据库编码
mysqli_set_charset($link,'gbk');//这里很讨厌,如果写utf8的话,下面的数据库插入语句会执行失败,需要将这个php文件另存为utf-8格式。无奈只能先改成gbk
//选择要连接的数据库
if( mysqli_select_db($link,'text') ){
echo '成功使用数据库text!';
}
else{
echo '使用数据库text失败!';
}//下面就可以使用php封装好的操作数据库的函数了
//添加操作
$query ='insert into student(姓名,学号,性别) values("王老五",55555,"男")';
var_dump( mysqli_query($link,$query) );
//留给下面的代码
//关闭数据库的连接
mysqli_close($link);
?>
关于gbk和utf-8的差别:https://www.cnblogs.com/churujianghudezai/p/11335978.html
php连接数据库后,选中某个表并遍历其每条记录的方式
在php中使用索引单条、关联单条、索引或关联的方式获得单条记录
将下面的代码插在上面代码的空白处即可运行
//索引数组的方式获得一条记录
$query ='select * from student';//预先写好mysql的查询语句
$result =mysqli_query($link,$query) ;//在数据库中执行语句,将结果返回到result中,result称为"结果集"
//函数mysqli_query的第三个参数可以填两个值,本篇不填写使用默认值。详见百度
//索引数组的方式获取每一条记录
while($data_row= mysqli_fetch_row($result) ){
//每轮从result中取出一行记录,放在data_row中
var_dump($data_row );
}
//关联数组的方式获得一条记录
$query ='select * from student';
$result =mysqli_query($link,$query) ;
while($data_row= mysqli_fetch_assoc($result) ){
//每轮从result中取出一行记录,放在data_row中
var_dump($data_row );
}
//索引或关联数组的方式获得一条记录
$query ='select * from student';
$result =mysqli_query($link,$query) ;
//mysqli_fetch_array的第二个参数可选:MYSQLI_ASSOC,MYSQLI_NUM,MYSQLI_BOTH。默认是第三个BOTH,两种方式都选
while($data_row= mysqli_fetch_array($result,MYSQLI_NUM) ){
//每轮从result中取出一行记录,放在data_row中
var_dump($data_row );
}
在php中使用索引或关联的方式获得全部记录(常用)
这个函数直接获得表的全部记录存在一个数组内,同样可以选择索引或关联的方式(常用这个)
$query ='select * from student';
$result =mysqli_query($link,$query) ;
//第二个参数同上,方式任君选择
$data_all=mysqli_fetch_all($result,MYSQLI_ASSOC);//这次采用关联的方式,换个口味
var_dump($data_all);
用返回对象的方式,获得选中表的字段信息
在php中获得包含 [一个字段的全部信息] 的一个对象
$query ='select * from student';
$result =mysqli_query($link,$query) ;
while( $data_row_obj =mysqli_fetch_field($result) ){//这个函数的返回类型是对象
var_dump( $data_row_obj);//显示这个字段的信息
}
在php中获得包含 [一个字段的全部信息] 的对象数组
$query ='select * from student';
$result =mysqli_query($link,$query) ;
$data_all_obj =mysqli_fetch_fields($result);//比上面的函数结尾多个s
var_dump( $data_all_obj);
获得结果集中行的数量,两种写法
这种写法纯属本人瞎试的(一看就是C语言用惯了)
//mysql
$query ='select count(*) from student';
$result =mysqli_query($link,$query);//注意result是一个包含字段信息的结果集对象,因此下面的打印要用面向对象的方式。
echo ($result->field_count);//打印结果集中的行数
库给的函数(咋感觉写起来还不如上面的快)。这种获得方式,当mysqli_query函数的第三个参数不是默认值,而是另一个值时,必须获得完表中的所有行,才能正确显示行数,否则一直显示0。具体原因可百度。
$query ='select * from student';
$result =mysqli_query($link,$query);
echo (mysqli_num_rows($result) );//如果是第三个参数默认值,不用顾虑直接使用
释放结果集result的内存
好习惯很重要,在定义result的时候就该写好释放函数
$query ='select * from student';
$result =mysqli_query($link,$query);
mysqli_free_result($result);
复习上述操作函数
1.建立、关闭与MySQL服务器的连接
1)连接指定的mysql服务器
$mysqli_connect=@mysqli_connect($host, $user, $password,$database,$port);
2)连接错误时的提示
int mysqli_connect_errno ();//返回最后一次连接调用的错误代码
string mysqli_connect_error ();//返回一个字符串描述的最后一次连接调用的错误代码
3)设置默认字符编码
bool mysqli_set_charset ( mysqli $link , string $charset )
4)选择特定的数据库
bool mysqli_select_db ( mysqli $link , string $dbname);
5)关闭与mysql服务器的连接
bool mysqli_close ( mysqli $link );
2.执SQL语句
1)对数据库执行一条SQL语句
1>mixed mysqli_query ( mysqli $link , string $query [, int $resultmode = MYSQLI_STORE_RESULT ] );
①对于insert,update,delete等不会返回数据的SQL语句,在执行没有错误时将返回true。
②对于返回数据的SQL语句执行成功的时候会返回结果集对象可以使用操作结果集对象的函数来从中获取数据
2)操作结果集对象的函数
1>从结果集对象中解析数据的常见函数
①以索引数组的方式获取一条记录的数据
mixed mysqli_fetch_row ( mysqli_result $result );
重复使用以获取下一条记录的数据
②以关联数组的方式获取一条记录的数据
array mysqli_fetch_assoc ( mysqli_result $result );
重复使用以获取下一条记录的数据
③以索引数组或关联数组的方式获取一条记录的数据
mixed mysqli_fetch_array ( mysqli_result $result [, int $resulttype = MYSQLI_BOTH ] );
重复使用以获取下一条记录的数据
④以索引数组或关联数组的方式获取全部记录的数据
mixed mysqli_fetch_all ( mysqli_result $result [, int $resulttype = MYSQLI_NUM ] );
⑤返回结果集中的下一个字段信息
object mysqli_fetch_field ( mysqli_result $result );
⑥返回一个代表结果集字段的对象数组
array mysqli_fetch_fields ( mysqli_result $result );
⑦获取结果中行的数量
int mysqli_num_rows ( mysqli_result $result );
注意:如果使用MYSQLI_USE_RESULT模式则必须在获取完结果集才可使用该函数。
2>释放与一个结果集相关的内存
返回的结果集在数据量很大的时候需要很多的内存支持,所以在操作完结果集的时候有必要立刻释放与一个结果集相关的内
存, 释放之后,结果集就不可用了
void mysqli_free_result ( mysqli_result $result );