zoukankan      html  css  js  c++  java
  • 其实今天没有欲望..-MySQLi

      hi

    中午爽爽的游了会儿泳,但是下午把一拳超人看完了,竟然萌生不出学习的欲望了。。。强迫自己更新点东西吧,一会儿看书去。

    1、MySQLi

    二、MySQLi基于OOP的编程

    2.1 使用解析

    --基本

    MySQLi是一个拓展类库,本质上是个类(?)。

    一般流程和MySQL一样:连接,选库,字符集设定,SQL语句执行,关闭连接

    --链接库例子

    <?php
    /*
    * 连接和选库
    */
    $mysqli=new mysqli('localhost', 'root', '');
    print_r($mysqli);echo "<br/>";

    echo $mysqli->select_db('test');echo "<br/>";

    $mysqli2=new mysqli();
    print_r($mysqli2->connect('localhost', 'root', ''));echo "<br/>";

    print_r($mysqli3=new mysqli('localhost', 'root', '','test'));echo "<br/>";

    三种不同的方法,这里的方法都是利用mysqli的类属性来做的;当然也可以利用mysqli的命令来链接;

    $con=mysqli_connect(HOST,USERNAME,PASSWORD)

    结果中有一些信息

    mysqli Object
      (
      [affected_rows] => 0
      [client_info] => mysqlnd 5.0.11-dev - 20120503 - $Id: bf9ad53b11c9a57efdb1057292d73b928b8c5c77 $
      [client_version] => 50011
      [connect_errno] => 0
      [connect_error] =>
      [errno] => 0
      [error] =>
      [error_list] => Array
      (
      )
       
      [field_count] => 0
      [host_info] => localhost via TCP/IP
      [info] =>
      [insert_id] => 0
      [server_info] => 5.6.17
      [server_version] => 50617
      [stat] => Uptime: 968 Threads: 1 Questions: 24 Slow queries: 0 Opens: 70 Flush tables: 1 Open tables: 63 Queries per second avg: 0.024
      [sqlstate] => 00000
      [protocol_version] => 10
      [thread_id] => 11
      [warning_count] => 0
      )

    这些属性都是可以通过对象的属性来得到的,比如

    echo $mysqli->client_info;echo "<br/>";

    或者是通过相对应的方法得到,这些东西查手册可以看到。

    <?php
    header('content-type:text/html;charset=utf-8');
    //1.建立到MySQL数据的连接
    // $mysqli=new mysqli('localhost','root','root');
    // //print_r($mysqli);
    // //2.打开指定的数据库
    // $mysqli->select_db('test');
    // $mysqli=new mysqli();
    // $mysqli->connect('127.0.0.1','root','root');
    // print_r($mysqli);

    //建立连接的同时打开指定数据库
    $mysqli=@new mysqli('localhost','root','root','test');
    //print_r($mysqli);
    //$mysqli->connect_errno:得到连接产生的错误编号
    //$mysqli->connect_error:得到连接产生的错误信息
    if($mysqli->connect_errno){
    die('Connect Error:'.$mysqli->connect_error);
    }
    print_r($mysqli);
    echo '<hr color="red"/>';
    echo '客户端的信息:'.$mysqli->client_info.'<br/>';
    echo $mysqli->get_client_info().'<br/>';
    echo '客户端的版本:'.$mysqli->client_version.'<br/>';
    echo '<hr/>';
    echo '服务器端信息:'.$mysqli->server_info.'<br/>';
    echo $mysqli->get_server_info();
    echo '<hr/>';
    echo '服务器版本:'.$mysqli->server_version.'<br/>';

    echo '<hr/>';

    --字符集例子

    <?php
    //1.建立到MySQL的连接
    $mysqli=@new mysqli('localhost','root','root','test');
    if($mysqli->connect_errno){
    die('Connect Error:'.$mysqli->connect_error);
    }
    //2.设置默认的客户端编码方式utf8
    $mysqli->set_charset('utf8');

    //3.执行SQL查询
    $sql=<<<EOF
    CREATE TABLE IF NOT EXISTS mysqli(
    id TINYINT UNSIGNED AUTO_INCREMENT KEY,
    username VARCHAR(20) NOT NULL
    );
    EOF;
    $res=$mysqli->query($sql);
    var_dump($res);

    /*
    SELECT/DESC/DESCRIBE/SHOW/EXPLAIN执行成功返回mysqli_result对象,执行失败返回false
    对于其它SQL语句的执行,执行成功返回true,否则返回false
    */
    //关闭连接
    $mysqli->close();

    需要注意的是数据库中的是utf8,而不是utf-8;

    2.2 插入记录操作

    增。

    --connect.php

    因为连接数据库的一系列操作是常用的,对于这种,我们简便的方法就是封装起来,到处调用

    require_once 'connect.php';

    connect.php

    <?php
    /*
    * 连接和选库(头)文件
    */
    $mysqli=new mysqli('localhost', 'root', '','test');
    if($mysqli->connect_errno){
    die('Connect Error:'.$mysqli->connect_error);
    }else{
    echo '客户端的信息:'.$mysqli->client_info.'<br/>';
    }
    $mysqli->set_charset('utf8');

    --增

    <?php
    /*
    * 数据库插入数据
    */

    require_once 'connect.php';

    $sql="insert mysqli(username) value('Tom')";
    echo $mysqli->query($sql);

    这里执行的是单条的sql语句。

    或者完善一点,添加一个判断,并输出错误信息。

    if($res){
    echo $mysqli->insert_id;
    }else{
    echo 'ERROR '.$mysqli->error;
    }

    或者,插入多条记录

    $sql="insert mysqli(username) value('Sdaf'),('Andy')";

    2.3 更新记录

    更新。

    $sql="update test set id=id+10";
    $mysqli->query($sql);

    2.4 删除

    $sql="delete from mysqli where id>=2";

    --

    特别说明,affected_rows返回的情况有三种:

    -1  sql语句有问题;

    0 没有受影响的语句;

    >=0 受影响的条数。

    --小结

    <?php
    header('content-type:text/html;charset=utf-8');
    $mysqli=new mysqli('localhost','root','root','test');
    if($mysqli->connect_errno){
    die('CONNECT ERROR:'.$mysqli->connect_error);
    }
    $mysqli->set_charset('utf8');

    //执行SQL查询
    //添加记录
    //执行单条SQL语句,只能执行一条SQL语句
    // $sql="INSERT user(username,password) VALUES('king','king');";
    // $sql.="DROP TABLE user;";
    $sql="INSERT user(username,password) VALUES('queen1','queen1'),('queen2','queen2'),('queen3','queen3'),('queen4','queen4')";
    $res=$mysqli->query($sql);
    if($res){
    //得到上一插入操作产生的AUTO_INCREMENT的值
    echo '恭喜您注册成功,您是网站第'.$mysqli->insert_id.'位用户<br/>';
    //得到上一步操作产生的受影响记录条数
    echo '有'.$mysqli->affected_rows.'记录被影响';
    }else{
    //得到上一步操作产生的错误号和错误信息
    echo 'ERROR '.$mysqli->errno.':'.$mysqli->error;
    }
    echo '<hr/>';

    //将表中年龄+10
    $sql="UPDATE user SET age=age+10";
    $res=$mysqli->query($sql);
    if($res){
    echo $mysqli->affected_rows.'条记录被更新';
    }else{
    echo "ERROR ".$mysqli->errno.':'.$mysqli->error;
    }
    echo '<hr/>';

    //将表中id<=6的用户删除掉
    $sql="DELETE FROM user WHERE id<=6";
    $res=$mysqli->query($sql);
    if($res){
    echo $mysqli->affected_rows.'条记录被删除';
    }else{
    echo "ERROR ".$mysqli->errno.':'.$mysqli->error;
    }
    //关闭到MySQL的连接
    $mysqli->close();

    2.5 查

    需要注意的是,用的是select,所以返回的是结果集,是可以打印出来的print_r或var_dump。

    所以这里就要说一下,返回的结果集的选择了。

    <?php
    header('content-type:text/html;charset=utf-8');
    $mysqli=new mysqli('localhost','root','root','test');
    if($mysqli->connect_errno){
    die('CONNECT ERROR:'.$mysqli->connect_error);
    }
    $mysqli->set_charset('utf8');
    $sql="SELECT id,username,age FROM user";
    $mysqli_result=$mysqli->query($sql);
    //var_dump($mysqli_result);
    if($mysqli_result && $mysqli_result->num_rows>0){
    //echo $mysqli_result->num_rows;
    //$rows=$mysqli_result->fetch_all();//获取结果集中所有记录,默认返回的是二维的
    //索引+索引的形式
    //$rows=$mysqli_result->fetch_all(MYSQLI_NUM);
    //$rows=$mysqli_result->fetch_all(MYSQLI_ASSOC);
    //$rows=$mysqli_result->fetch_all(MYSQLI_BOTH);
    // $row=$mysqli_result->fetch_row();//取得结果集中一条记录作为索引数组返回
    // print_r($row);
    // echo '<hr/>';
    // $row=$mysqli_result->fetch_assoc();//取得结果集中的一条记录作为关联数组返回
    // print_r($row);
    // echo '<hr/>';
    // $row=$mysqli_result->fetch_array();//二者都有的
    // print_r($row);

    // echo '<hr/>';
    // $row=$mysqli_result->fetch_array(MYSQLI_ASSOC);
    // print_r($row);

    // echo '<hr/>';
    // $row=$mysqli_result->fetch_object();
    // print_r($row);
    // echo '<hr/>';
    // //移动结果集内部指针
    // $mysqli_result->data_seek(0);
    // $row=$mysqli_result->fetch_assoc();
    // print_r($row);

    // print_r($rows);

    while($row=$mysqli_result->fetch_assoc()){
    //print_r($row);
    //echo '<hr/>';
    $rows[]=$row;
    }
    print_r($rows);

    //释放结果集
    $mysqli_result->free();


    }else{
    echo '查询错误或者结果集中没有记录';
    }
    $mysqli->close();

  • 相关阅读:
    数据库的视图概念作用
    常见的反爬虫和应对方法
    referrer policy
    JSON
    异步消息处理机制
    Acitivity(活动)
    springboot @Autowired 空指针异常问题处理
    CentOS7 宝塔 ThinkPHP SQLServer 2000 安装FreeTDS
    PHP THINKPHP 函数 dump var_dump var_export
    ThinkPHP5 WHERE AND OR 实现多条件查询
  • 原文地址:https://www.cnblogs.com/andy1202go/p/5034064.html
Copyright © 2011-2022 走看看