1、连接数据库
<?php
header("Content-type:text/html;charset=utf-8"); //使用这个语句表明是使用utf-8编码的
$link = mysql_connect(Mysql服务器,用户名,密码,是否建立新连接,客户端标记);
?>
建立成功返回一个Mysql的连接标识,失败时返回false。
在mamp下使用mysql_connect
连接数据库时总是无法成功,查阅后很多说是mysql_connect
被启用的原因。
使用echo phpinfo()
,打印出了php的配置信息,在mysqli的地方,发现mysqli.default_port
值为3306,也就是mysqlo语句的默认端口为3306。
接下来在mamp设置的mysql的端口也为3306;mamp有快捷设置。
在mamp客户端左侧的MySQL里设置
我使用的域名为test03.com
$link = mysqli_connect('test03.com','root','123456') or die('数据库连接失败');
die($str);
表示在输出信息之后退出当前脚本,与exit()
相同。
2、关闭连接
面向过程风格:mysqli_close
返回值为布尔值
mysqli_close($link); //$link为之前建立的数据库连接
3、数据库选择(切换)
一个数据库软件下可以创建多个数据库,在操作的时候,我们就需要去选择对应的数据库。mysqli_select_db(链接名,数据库名)
$info_db = mysqli_select_db($link,'info'); //选择名为info的数据库
3、数据库操作
语句:mysqli_query(数据库名,查询语句);
在执行之前应该告知数据库我们即将执行的查询的内容是什么类型的
mysqli_query('set names utf8');
失败时返回 FALSE,通过mysqli_query() 成功执行SELECT, SHOW, DESCRIBE或 EXPLAIN查询会返回一个mysqli_result 对象,其他查询则返回TRUE。
$result = mysqli_query($info_db, 'SELECT * FROM student');
遇到的问题
自己在做到这个地方的时候出现了问题:
使用以下代码会查询失败,连接数据库、选择数据库都成功。
$info_db = mysqli_select_db($link,'info');
if($info_db){
echo '选择数据库成功<br>';
$res = mysqli_query($info_db, 'SELECT * FROM student');
if($res){
echo '查询成功<br>';
}else {
echo var_dump($res);
echo '查询失败<br>';
}
}else {
echo '选择数据库失败<br>';
}
以下会成功
$con = mysqli_connect('localhost','root','123456','info');
if(mysqli_connect_error($con)){
echo mysqli_connect_error($con);
}else {
echo '连接数据库成功';
}
$result = mysqli_query($charseton,'SELECT * FROM student');
if($result) {
echo '查询成功';
}else {
echo '查询失败';
}
这里错误的原因是对mysqli_select_db()
函数的认识的不足,这个函数的的返回值为一个布尔值,而不是一个数据库的链接。在经过这个步骤后的数据库连接已经指向了info
,因此,只需要在后面的操作中继续使用$link
就ok了。
数据库查询:
成功返回的是一个mysqli_result
对象,错误返回false。
$result = mysqli_query($con, "SELECT * FROM student");
数据库插入:
返回的是一个bool值,成功TRUE,失败FALSE。
$res = mysqli_query($con, "INSERT INTO student(id, name, age, class) VALUES(1233,'麦兜',24,'春田')");
以上代码在设置值的时候需要跟数据库中的设置相匹配,数据的类型需要匹配正确。
如果缺省key
值,会默认在数据库的最后一行插入数据,key
值递增,递增后的key值可以通过mysqli_insert_id(数据库连接)
来获取
$id = mysqli_insert_id($con);
4、获取和显示数据
1、mysqli_fetch_all(mysqli_result_obj,return_type);
获取结果集的所有信息,以特定方式返回数组。
return_type有三个取值:
- MYSQLI_ASSOC 返回一个关联数组
- MYSQLI_NUM 默认值,返回一个索引数组
- MYSQLI_BOTH 两个都返回。
2、mysqli_fetch_row(mysqli_result_obj);
获取返回的资源对象中的一行数据。在完成后,资源指针会自增。结果为一个索引数组,就是[0] =>2008
$data = mysqli_fetch_row($result);
$data1 = mysqli_fetch_row($result); //这条语句获取的数据是上一条语句获取的数据的下一跳
3、mysqli_fetch_array(mysqli_result_obj);
语法: mysqli_fetch_array(查询结果集, 返回值类型)
;
返回值类型可选,有三个取值,都为常量:
- MYSQLI_ASSOC 返回一个关联数组
- MYSQLI_NUM 返回一个索引数组
- MYSQLI_BOTH 默认值,两个都返回。
获取返回的资源对象中的一行数据。在完成后,资源指针会自增。结果为一个索引数组和一个关联数组,就是[0] =>2008,[id] =>2008
$data = mysqli_fetch_array($result);
4、mysqli_fetch_assoc(mysqli_result_obj);
获取结果集的数据,返回一个关联数组。
$data = mysqli_fetch_assoc($result);
5、mysqli_fetch_object(mysqli_result_obj);
获取结果集的数据,返回一个对象。
$data-obj = mysqli_fetch_object($result);
6、mysqli_fetch_field(mysqli_result_obj);
逐列获取结果集中的字段信息,返回一个对象。比如字段的名称,最大长度,所在表等等。一次只能查询一个字段,查询完成后指针会自增到下一列,也就是下一个字段。
$field_info = mysqli_fetch_field();
7、mysqli_fetch_field_direct(mysqli_result_obj,index);
按照索引值准确获取某一列的字段的信息
$field_info = mysqli_fetch_field_direct($result, 2);
8、mysqli_fetch_count(link)
获取最近一次查询的列数
$result = mysqli_query($link,'SELECT * FROM student');
echo mysqli_fetch_count($link); //输出4,也就是全部
$result1 = mysqli_query($link,'SELECT NAME FROM student');
echo mysqli_fetch_count($link); //输出1
9、
mysqli_field_seek(result,偏移量);
设置结果集中字段的偏移量,也就是将结果集的中的字段指针移动到指定位置,取值为0~length-1
mysqli_field_seek($result, 2);
$field_info = mysqli_fetch_field($result); //取到的是age字段
10、
mysqli_field_tell(result,偏移量);
返回结果集中字段指针的位置
mysqli_field_tell($field_info);
11、mysqli_num_rows
获取结果集中数据的总行数,也就是在数据库中查询的内容有多少行
$num = mysqli_num_row($result);
12、mysqli_num_fields
获取结果集中的字段的个数,也就是结果集中每一行的字段个数
$fieds_count = mysqli_num_fields($result);
13、mysqli_free_result(result)
释放结果集内存,但结果集对象仍然存在,只是其中的数据全为NULL
mysqli_free_result($result);
5、获取受到影响的记录的行数
返回前一次受到INSERT,UPDATE,DELETE操作影响的行数,返回一个整数。
mysqli_affected_rows(数据库连接)
;
$num = mysqli_affected_rows($con);