PHP连接和操作MySQL数据库基础教程


从这里开始

我的博客,后台数据库是什么?没错,就是MySQL,服务器端使用的脚本就是PHP,整个框架使用的是WordPress。PHP和MySQL就像夫妻一样,总是在一起干活。现在这里,就集合PHP,总结一下MySQL的实际使用,也算作是MySQL开发的入门。关于PHP与MySQL的合作,不外乎以下三种方法:

1.mysql扩展;但是目前已经不推荐使用;

2.mysqli扩展;同时提供面向对象风格和面向过程的风格;要求MySQL版本是4.1及以上的;

3.PDO扩展为PHP访问数据库定义了一种轻量级的一致接口;PDO_MYSQL是对其的具体实现。这里暂时只关心开发。由于mysql扩展已经不推荐使用了,我也会与时俱进,不做总结;而mysqli和PDO方式用的比较多,所以这篇将会总结如何使用mysqli扩展来连接数据库服务器,如何查询和获取数据,以及如何执行其它重要任务。下一篇博文将会总结PDO的相关内容。

使用mysqli扩展

先看以下测试数据库db_test中的测试数据:

http://www.phpstudy.net/article/55792.htm;下面是一个简单的使用例子:

复制代码 代码如下:

<?php
    // 实例化mysqli类
    $mysqliConn = new mysqli();
 
    // 连接服务器,并选择一个数据库
    // 错误的密码
    $mysqliConn->connect('127.0.0.1', 'root', 'root', 'db_test');
    if ($mysqliConn->connect_error)
    {
        printf("Unable to connect to the database:%s", $mysqliConn->connect_error);
        exit();
    }
   
    // 与数据库交互
    $query = 'select firstname, lastname, email from tb_test;';
 
    // 发送查询给MySQL
    $result = $mysqliConn->query($query);
 
    // 迭代处理结果集
    while (list($firstname, $lastname, $email) = $result->fetch_row())
    {
        printf("%s %s's email:%s<br/>", $firstname, $lastname, $email);
    }
   
    // 关闭连接
    $mysqliConn->close();
?>

2.插入、更新和删除数据

插入、更新和删除使用的是insert、update和delete查询完成的,其做法实际上与select查询相同。示例代码如下:

复制代码 代码如下:

<?php
    // 实例化mysqli类
    $mysqliConn = new mysqli();
 
    // 连接服务器,并选择一个数据库
    // 错误的密码
    $mysqliConn->connect('127.0.0.1', 'root', 'root', 'db_test');
    if ($mysqliConn->connect_error)
    {
        printf("Unable to connect to the database:%s", $mysqliConn->connect_error);
        exit();
    }
   
    // 与数据库交互
    $query = 'select firstname, lastname, email from tb_test;';
    // 发送查询给MySQL
    $result = $mysqliConn->query($query);
 
    // 迭代处理结果集
    while (list($firstname, $lastname, $email) = $result->fetch_row())
    {
        printf("%s %s's email:%s<br/>", $firstname, $lastname, $email);
    }
   
    $query = "delete from tb_test where firstname = 'Yuan';";
    $result = $mysqliConn->query($query);
 
    // 告诉用户影响了多少行
    printf("%d row(s) have been deleted.<br/>", $mysqliConn->affected_rows);
    // 重新查询结果集
    $query = 'select firstname, lastname, email from tb_test;';
 
    // 发送查询给MySQL
    $result = $mysqliConn->query($query);
 
    // 迭代处理结果集
    while (list($firstname, $lastname, $email) = $result->fetch_row())
    {
        printf("%s %s's email:%s<br/>", $firstname, $lastname, $email);
    }
    // 关闭连接
    $mysqliConn->close();
?>

3.释放查询内存

有时可能会获取一个特别庞大的结果集,此时一旦完成处理,很有必要释放该结果集所请求的内存。free()方法可以为我们完成这个任务。例如:

复制代码 代码如下:

// 与数据库交互
$query = 'select firstname, lastname, email from tb_test;';
 
// 发送查询给MySQL
$result = $mysqliConn->query($query);
 
// 迭代处理结果集
while (list($firstname, $lastname, $email) = $result->fetch_row())
{
    printf("%s %s's email:%s<br/>", $firstname, $lastname, $email);
}
$result->free();

4.解析查询结果

一旦执行了查询并准备好结果集,下面就可以解析获取到的结果行了。你可以使用多个方法来获取各行中的字段,具体选择哪一个方法主要取决于个人喜好,因为只是引用字段的方法有所不同。

(1)将结果放到对象中

使用fetch_object()方法来完成。fetch_object()方法通常在一个循环中调用,每次调用都使得返回结果集中的下一行被填入一个对象,然后可以按照PHP典型的对象访问语法来访问这个对象。例如:

复制代码 代码如下:

// 与数据库交互
$query = 'select firstname, lastname, email from tb_test;';
 
// 发送查询给MySQL
$result = $mysqliConn->query($query);
 
// 迭代处理结果集
while ($row = $result->fetch_object())
{
    $firstname = $row->firstname;
    $lastname = $row->lastname;
    $email = $row->email;
}
$result->free();

(2)使用索引数组和关联数组获取结果

mysqli扩展包还允许通过fetch_array()方法和fetch_row()方法分别使用关联数组和索引数组来管理结果集。fetch_array()方法实际上能够将结果集的各行获取为一个关联数组、一个数字索引数组,或者同时包括二者,可以说,fetch_row()是fetch_array的一个子集。默认地,fetch_array()会同时获取关联数组和索引数组,可以在fetch_array中传入参数来修改这个默认行为。

MYSQLI_ASSOC,将行作为一个关联数组返回,键由字段名表示,值由字段内容表示;
MYSQLI_NUM,将行作为一个数字索引数组返回,其元素顺序由查询中指定的字段名顺序决定;
MYSQLI_BOTH,就是默认的选项。

确定所选择的行和受影响的行

通常希望能够确定select查询返回的行数,或者受insert、update或delete影响的行数。

(1)确定返回的行数

如果希望了解select查询语句返回了多少行,num_rows属性很有用。例如:

复制代码 代码如下:

// 与数据库交互
$query = 'select firstname, lastname, email from tb_test;';
 
// 发送查询给MySQL
$result = $mysqliConn->query($query);
 
// 获取行数
$result->num_rows;

记住,num_rows只在确定select查询所获取的行数时有用,如果要获得受insert、update或delete影响的行数,就要使用下面总结的affected_rows属性。

(2)确定受影响的行数

affected_rows属性用来获取受insert、update或delete影响的行数。代码示例见上面的代码。

执行数据库事务

有3个新方法增强了PHP执行MySQL事务的功能,分别为:

1.autocommit函数,启用自动提交模式;

autocommit()函数控制MySQL自动提交模式的行为,由传入的参数决定启动还是禁用自动提交;传入TRUE,则启动自动提交,传入false则禁用自动提交。无论启用还是禁用,成功时都将返回TRUE,失败时返回FALSE。

2.commit函数,提交事务;将当前事务提交给数据库,成功时返回TRUE,否则返回FALSE。

3.rollback函数,回滚当前事务,成功时返回TRUE,否则返回FALSE。

关于事务,我后面还要继续总结,这里就简要的总结了一下这三个API。

不会结束

这只是MySQL学习的开始,不会结束。再接再励。


« 
» 

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3