• PHP mysqli操作数据库


    起步

    由于mysql连接方式被废除,在php7中要使用mysql_connect()还需要额外下载组件。

    使用mysqli有面向过程和面向对象两种方式。

    mysqli提供了三个类:

    ● mysqli 连接相关的

    ● mysqli_result 处理结果集

    ● mysqli_stmt 预处理类

    数据库连接

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    <?php

    $db_host = 'localhost';

    $db_name = 'test';

    $db_user = 'root';

    $db_pwd = '';

    //面向对象方式

    $mysqli = new mysqli($db_host, $db_user, $db_pwd, $db_name);

    //面向对象的昂视屏蔽了连接产生的错误,需要通过函数来判断

    if(mysqli_connect_error()){

        echo mysqli_connect_error();

    }

    //设置编码

    $mysqli->set_charset("utf8");//或者 $mysqli->query("set names 'utf8'")

    //关闭连接

    $mysqli->close();

    //面向过程方式的连接方式

    $mysqli = mysqli_connect($db_host, $db_user, $db_pwd, $db_name);

    //判断是否连接成功

    if(!$mysqli ){

        echo mysqli_connect_error();

    }

    //关闭连接

    mysqli_close($mysqli);

    ?>

    数据库查询

    通用:执行sql语句都可用query(sql),执行失败会返回false,select成功则返回结果集对象,其他返回true,只要不是false就说明sql语句执行成功了。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    <?php

    //无结果集示例

    $sql = "insert into table_name (`name`, `address`) values ('xiaoming', 'adddddrrreess')";

    $result = $mysqli->query($sql);

    //或者

    $sql = "delete from table_name where name='xiaoming'";

    $result = $mysqli->query($sql);

    if($result === false){

        echo $mysqli->error;

        echo $mysqli->errno;

    }

    //影响条数

    echo $mysqli->num_rows;

    //插入的id

    echo $mysqli->insert_id;

    $mysqli->close();

    有结果集

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    <?php

    $sql = "select * from table_name";

    $result = $mysqli->query($sql);

    if($result === false){//执行失败

        echo $mysqli->error;

        echo $mysqli->errno;

    }

    //行数

    echo $result->num_rows;

    //列数 字段数

    echo $result->field_count;

    //获取字段信息

    $field_info_arr = $result->fetch_fields();

    //移动记录指针

    //$result->data_seek(1);//0 为重置指针到起始

    //获取数据

    while($row = $result->fetch_assoc()){

        echo $row['name'];

        echo $row['address'];

    }

    //也可一次性获取所有数据

    //$result->data_seek(0);//如果前面有移动指针则需重置

    $data = $result->fetch_all(MYSQLI_ASSOC);

    $mysqli->close();

    预处理示例

    预处理能有效的防止sql注入的产生,mysqli_stmt是预处理类

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    <?php

    $sql = "insert inro table_name ('name','address') values (?,?)";

    //获得预处理对象

    $stmt = $mysqli->prepare($sql);

    //绑定参数 第一个参数为绑定的数据类型

    /*

    i:integer 整型

    d:double 浮点型

    s:string 字符串

    b:a blob packets blob数据包

    */

    $name = "xiaoming";

    $address = "adddressss";

    $stmt->bind_param("ss", $name, $address);//绑定时使用变量绑定

    //执行预处理

    $stmt->execute();

    /*

    //可重新绑定 多次执行

    $stmt->bind_param("ss", $name, $address);

    $stmt->execute();

    */

    //插入的id 多次插入为最后id

    echo $stmt->insert_id;

    //影响行数 也是最后一次执行的

    echo $stmt->affected_rows;

    //错误号

    echo $stmt->errno;

    //错误信息

    echo $stmt->error;

    //关闭

    $stmt->close();

    $mysqli->close();

    下面示例select的预处理

    //注释部分省略

    $sql = "select * from table_name where id<?";

    $stmt = $mysqli->prepare($sql);

    $id = 30;

    $stmt->bind_param("i", $id);

    $stmt->execute();

    //获取结果集

    $result = $stmt->get_result();//结果集取后的操作就和之前一样了

    //获取所有数据

    $data = $result->fetch_all(MYSQLI_ASSOC);

    $result->close();

    $mysqli->close();

    一次执行多条sql语句multiquery(不推荐),执行结果不是结果集,affectd_rows是最后影响的条数

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    <?php

    $sql_arr = array(

        "insert into table_name (`name`,`address`) values ('xiaoming','a')",

        "insert into table_name (`name`,`address`) values ('xiaohong','a')",

        'delete from table_name where id=23',

    );

    $sql = implode(';', $sql_arr);

    $result = $mysqli->multi_query($sql);

    if($result === false){

        echo $mysqli->error;

    }

    $mysqli->close();

    明确的学习思路能更高效的学习

    点此加入该群学习

  • 相关阅读:
    SWT DragSource 和 DropTarget 托拉拽
    Java的反射机制
    1. 算法导论
    SWT对于监听Tab键的理解
    SWT基础
    socket
    TCP/IP
    RPC(远程过程调用协议)
    Jython基本知识
    #与##
  • 原文地址:https://www.cnblogs.com/heyue0117/p/11812135.html
Copyright © 2020-2023  润新知