php数据库编程—mysql

基本概念

php有三种方式来操作mysql数据库

  • mysql扩展库
  • mysqli扩展库
  • pdo

mysql扩展库和mysql数据库的区别

  • mysql数据库是用来存放数据的
  • mysql扩展库是一堆函数,是php设计者提供给程序员用于完成对mysql数据库的各种操作 (CRUD)

mysql数据库的三层结构
在这里插入图片描述

快速入门案例

首先要在php.ini中启动mysql扩展库,通过phpinfo()函数可以查看php支持哪些扩展库

创建user表

mysql> create table user(
    -> id int primary key auto_increment,
    -> name varchar(32) not null,
    -> password varchar(64) not null,
    -> email varchar(128) not null,
    -> age tinyint unsigned not null
    -> );
Query OK, 0 rows affected (0.10 sec)

insert into user(name,password,email,age) values('zs',md5(12345),'zs@qq.com',30);
insert into user(name,password,email,age) values('ls',md5(12345),'ls@qq.com',20);
insert into user(name,password,email,age) values('王五',md5(12345),'ww@qq.com',10);
Query OK, 3 row affected (0.04 sec)

mysql> select * from user;
+----+------+----------------------------------+-----------+-----+
| id | name | password                         | email     | age |
+----+------+----------------------------------+-----------+-----+
|  1 | zs   | 827ccb0eea8a706c4c34a16891f84e7b | zs@qq.com |  30 |
|  2 | ls   | 827ccb0eea8a706c4c34a16891f84e7b | ls@qq.com |  20 |
|  3 | 王五 | 827ccb0eea8a706c4c34a16891f84e7b | ww@qq.com |  10 |
+----+------+----------------------------------+-----------+-----+
3 rows in set (0.00 sec)

查询操作(dql)

//mysql扩展库操作mysql

//1.连接数据库
$conn = @mysql_connect('localhost','root','');

if (!$conn){
    die('链接失败'.mysql_error($conn));
}else{
    echo '链接成功';
}

//2.选择数据库
mysql_select_db('test',$conn) or die(mysql_error($conn));

//3.设置字符集
mysql_query('set names utf8',$conn);

//4.查询数据
$sql = 'select * from user';
//$res是资源类型,表示结果集,可以简单理解为他是一张表
$res = mysql_query($sql,$conn);
if (!$res){
    die('无法读取数据<br>'.mysql_error($conn));
}
echo '数据读取成功','<br>';

//5.处理结果集,显示数据
while ($row = mysql_fetch_object($res)){
    //echo "$row[0]--$row[1]--$row[2]<br>";
    foreach ($row as $k=>$v){
        echo "$v--";
    }
    echo '<br>';
}

//6.释放资源,关闭连接
//释放取到的$res资源,这句话必须有,不写的话脚本结束也会自动释放,但是如果取很多资源的话会占用大量内存
mysql_free_result($res);
//关闭mysql连接(就算写,也不会立马关闭),一般不写,因为会在脚本执行完毕后自动关闭
mysql_close($conn);

增删改操作(dml)

//1.连接数据库
$conn = @mysql_connect('localhost','root','');
if (!$conn){
    die('链接失败'.mysql_error($conn));
}

//2.选择数据库
mysql_select_db('test',$conn) or die(mysql_error($conn));

//3.设置字符集
mysql_query('set names utf8', $conn);

//4.操作数据库 (增删改)
//$sql = "insert into user(id,name,password,email,age) values(4,'小明',md5(12345),'xm@qq.com',35)";
//$sql = 'delete from user where id=10';
$sql = "update user set age=18 where id=4";
//如果是dml操作,则返回bool
$res = mysql_query($sql,$conn);

if (!$res){
    die('操作失败'.mysql_error($conn));
}

//删除操作即使删除不存在的数据,也不会报错,需要用下面函数查看操作了几行数据
if (mysql_affected_rows($conn)>0){
    echo '操作成功';
}else{
    echo '未进行数据操作';
}

//5.释放资源,关闭连接
//增删改操作得到的结果是bool,关闭资源操作会报错
//mysql_free_result($res);
//关闭mysql连接(就算写,也不会立马关闭),一般不写,因为会在脚本执行完毕后自动关闭
mysql_close($conn);

细节说明

大多数函数的 link_identifier 参数规定 SQL 连接标识符。如果未规定,则使用上一个打开的连接

资源相关

  • mysql数据库在取到资源$res后,立马关闭mysql连接,仍然可以正常读取数据,因为它将取到的资源放进了内存,此时和mysql连接已经没有关系了,但此时如果立马释放资源,就报错了
  • mysql_query()的dql操作,成功返回 resource,出错返回 false,dml操作,返回bool
  • dql操作需要关闭资源,dml操作不用关闭资源 (因为没有)

连接数据库

  • mysql_connect() 成功返回一个 mysql 连接标识,失败返回 false
  • mysql_error() 的参数是一个连接标识,但是如果连接数据库失败会返回false,导致错误处理失效

函数详解

mysql_connect()

成功返回一个 mysql 连接标识 link_identifier,失败返回 false

mysql_error()

本函数返回上一个 MySQL 函数的错误文本,如果没有出错则返回 ''(空字符串)
link_identifier 参数规定 SQL 连接标识符。如果未规定,则使用上一个打开的连接

mysql_query()

如果执行的是dml 语句,则返回bool
如果执行的是 dql 语句,则返回一个资源标识符,如果查询执行不正确则返回 false
创建 / 删除数据库,设置字符集等有专用函数,但是可以用mysql_query()函数代替,返回bool

mysql_affected_rows()

取得最近一次与 link_identifier 关联的 INSERTUPDATEDELETE 查询所影响的记录行数
删除操作即使删除不存在的数据,也不会报错,需要用该函数查看操作了几行数据

mysql_insert_id()

取得上一步 insert 操作产生的 ID

处理资源$res的几种函数

mysqli_fetch_row(),从结果集中取得一行,并作为索引数组返回

Array ( [0] => 1 [1] => zs [2] => ** [3] => zs@qq.com [4] => 30 )

mysqli_fetch_assoc(),从结果集中取得一行,并作为关联数组返回

Array ( [id] => 1 [name] => zs [password] => ** [email] => zs@qq.com [age] => 30 )

mysqli_fetch_array() ,从结果集中取得一行,并作为索引数组和关联数组返回

Array ( [0] => 1 [id] => 1 [1] => zs [name] => zs [2] => ** [password] => ** [3] => zs@qq.com [email] => zs@qq.com [4] => 30 [age] => 30 )

mysqli_fetch_object() ,从结果集中取得一行,并作为对象返回

stdClass Object ( [id] => 1 [name] => zs [password] => ** [email] => zs@qq.com [age] => 30 )

更多函数 link

mysql_field_name(),成功返回指定字段的名称,失败返回 false

mysql_num_fields(),返回结果集中字段的数目

mysql_num_rows(),返回结果集中行的数目

//5.处理结果集,打印成表格

//查看行数和列数
echo $rows = mysql_num_rows($res);
echo $columns = mysql_num_fields($res);

//打印成表格
echo '<table border="1px">';
echo '<tr>';
for ($i=0;$i<$columns;$i++){
    $file_name = mysql_field_name($res,$i);
    echo "<th>$file_name</th>";
}
echo '</tr>';
while ($row = mysql_fetch_row($res)){
    echo '<tr>';
    foreach ($row as $k=>$v){
        echo "<td>$v</td>";
    }
    echo '</tr>';
}
echo '</table>';

mysql 增删改查工具类

<?php
class myDB{
    private $conn;
    private $host;
    private $user;
    private $password;
    private $dbname;
    private $charset;

    function __construct($host,$user,$password,$dbname,$charset){
        $this->host = $host;
        $this->user = $user;
        $this->password = $password;
        $this->dbname = $dbname;
        $this->charset = $charset;
    }

    //1.连接数据库
    public function connect(){
        $this->conn = @mysql_connect($this->host,$this->user,$this->password);

        if (!$this->conn){
            die('链接失败'.mysql_error($this->conn));
        }
    }

    //2.选择数据库,设置编码
    public function set(){
        mysql_select_db($this->dbname,$this->conn) or die(mysql_error($this->conn));
        mysql_query($this->charset,$this->conn);
    }

    //3.操作数据(查)
    public function execute_dql($sql){
        $res = mysql_query($sql,$this->conn);
        if (!$res){
            echo '操作失败'.die(mysql_error($this->conn));
        }
        while ($row = mysql_fetch_row($res)){
            foreach ($row as $k=>$v){
                echo "$v--";
            }
            echo '<br>';
        }

        //4.关闭资源,关闭连接
        mysql_free_result($res);
    }

    //3.操作数据(增删改)
    public function execute_dml($sql){
        $res = mysql_query($sql,$this->conn);
        if (!$res){
            echo '操作失败'.die(mysql_error($this->conn));
        }

        if(mysql_affected_rows($this->conn)>0){
            echo '操作成功';
        }else{
            echo '未进行数据操作';
        }

        //4.关闭连接
        mysql_close($this->conn);
    }
}


$a = new myDB('localhost','root','','test','utf8');
$a->connect();
$a->set();
//$a->execute_dql('select * from user');
$a->execute_dml('delete from user where id=8');
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值