现在一般在项目开发的过程中使用原生php开发的机会比较少,大多数情况会使用某种php框架进行开发,如kano技术博客经常使用的ThinkPHP,风评很高的Laravel和Yii等,这些框架对于数据库的操作或多或少的进行了一些封装,使之变得更易书写和阅读。但是作为一名合格的开发者,使用原生的php操作数据库也是需要掌握的基础。
原生php的数据库操作的可用API有的mysql和mysqli及PDO(PHP Data Object)三种,mysql扩展在php5.5版本被废弃,与php7.0版本移除,官方建议2012年之后不再使用mysql扩展,文本的例子中使用的是mysqli。
一、连接与关闭
使用mysqli_conn开启一个数据库连接,mysqli_close关闭一个数据库连接。
$con = mysqli_connect('localhost', 'my_user', 'aaCCab$bb$sss'); if ($con) { // do something } mysqli_close($con);
mysqli_connect的参数为:服务器、用户名、密码,成功的话返回一个连接标识,失败返回false。mysqli_close的参数为由mysqli_connect创建的连接标识。
二、执行sql语句
执行一条sql语句我们用mysqli_query,它接受两个参数:连接标识和要执行的sql语句。下面举几个使用它的例子。
1. 创建数据库和数据表
一般的项目开发中我们并不会用php来创建数据库和数据表,我们会用数据库管理工具创建它们(如Navicat for MYSQL, SQLyog等)。不过如果你做的是cms系统或者某些需要安装的系统的话,就会需要知道如何用php创建它们。
创建数据库
$sql = "CREATE DATABASE my_database"; if (mysqli_query($con, $sql)) { echo mysqli_error($con); } else { echo '数据库my_database创建成功<br>'; }
创建数据表
mysqli_query($con, 'use my_database'); $sql2 = 'CREATE TABLE person ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30) NOT NULL, age SMALLINT )'; if (mysqli_query($con, $sql2)) { echo mysqli_error($con); } else { echo '数据表person创建成功<br>'; }
打开数据库发现数据库和表都创建了出来。
可以看到上面的例子里kano个人博客用了一个mysqlI_error方法,它能够在语句执行发生错误时返回错误信息,参数为连接标识。
※ SQL语句的语法知识需要大家自己了解一下,这里就不讲解了。
2. 插入数据
同样还是使用mysqli_query函数。
$sql = 'insert into person values(id, "张三", 15)'; if (mysqli_query($con, $sql)) { echo '数据插入成功<br>'; } else { echo mysqli_error($con); }
查看数据库,可以看到一条数据插入进来了。
三、查询与结果集处理
mysqli_query在成功执行select时会返回一个结果集,可以使用mysqli_num_rows读取结果集的条数,使用mysqli_fetch_assoc将结果集放入一个关联数组。 $sql = 'select * from person'; $res = mysqli_query($con, $sql); if ($res) { echo '总共有' . mysqli_num_rows($res) . '条数据:<br>'; while ($row = mysqli_fetch_assoc($res)) { echo "{$row['id']} -- {$row['name']} -- {$row['age']}<br>"; } } else { echo mysqli_error($con); }
对于结果集的处理有很多函数,mysqli_fetch_assoc只是其中一个,作为用从结果集中以关联数组的形式取得一行。除此之外还有很多函数:
1. mysqli_fetch_all(res, type) 从结果集中取得所有行,第二个参数决定以关联数组或索引数组、或者二者兼有返回,默认以索引数组返回。
2. mysqli_fetch_array(res, type) mysqli_fetch_all的返回一行版本,也可以指定返回的类型。
3. mysqli_fetch_field(res) 从结果集中获取下一字段信息,以对象形式返回
4. mysqli_fetch_fields(res) 获取所有字段信息,以对象数组返回。
以上就是kano个人博客今天为大家带来的原生php对于mysql的基本操作,虽然平时很少会用到,但它们正是框架中那些模块化的查询的基础。