mysqli_mysqlin - CSDN
  • PHP之MySQLi类讲解

    千次阅读 2019-09-06 23:26:22
    2 MySQLi属性及描述 3 MySQLi方法及描述 4 获取MySQLi属性信息 5 常用的MySQLi方法 1 引言 在web开发中,php与mysql可谓是最合适不过的搭档了,这两兄弟经常一起合作,作为开发者的我们得要好好的了解一下...

    目录

    1 引言 

    2 MySQLi属性及描述 

    3 MySQLi方法及描述

    4 获取MySQLi属性信息

    5 常用的MySQLi方法

     


     

    1 引言 

    在web开发中,php与mysql可谓是最合适不过的搭档了,这两兄弟经常一起合作,作为开发者的我们得要好好的了解一下它们是如何相处的,下面笔者做了些小笔记,方便日后查阅,同时也希望能够帮助到大家,再次之前我们可以先阅读一下php的官方描述,两者结合阅读效果更佳。

    php官方MySQLI类传送门:https://www.php.net/manual/zh/class.mysqli.php

     

    2 MySQLi属性及描述 

    int $affected_rows;    // 受影响的条数
    int $connect_errno;    // 最后一次连接的错误代码
    string $connect_error; // 最后一次连接的错误描述
    int $errno;            // 错误号
    array $error_list;     // 上次执行的命令中的错误列表。
    string $error;         // 错误信息
    int $field_count;
    string $client_info; // 客户端信息
    int $client_version; // 客户端版本
    string $host_info;   // 主机信息
    string $protocol_version;// 协议版本
    string $server_info; // 服务的信息
    int $server_version; // 服务端版本
    string $info;        // 提示信息
    mixed $insert_id;    // 最后插入的id
    string $sqlstate;    // SQL状态码
    int $thread_id;
    int $warning_count;  // 警告条数

     

    3 MySQLi方法及描述

    mysqli::$affected_rows — 上一次MySQL操作中受影响的行数。
    mysqli::autocommit     — 打开或关闭本次数据库连接的自动命令提交事务模式
    mysqli::begin_transaction  — 开启事务
    mysqli::change_user        — 更改指定数据库连接的用户
    mysqli::character_set_name — 返回当前数据库连接的默认字符编码
    mysqli::close  — 关闭先前打开的数据库连接
    mysqli::commit — 提交一个事务
    mysqli::$connect_errno  — 返回上次连接调用中的错误代码。
    mysqli::$connect_error  — 返回上一个连接错误的描述
    mysqli::__construct     — 构造函数
    mysqli::debug           — debug
    mysqli::dump_debug_info — 将调试信息输出到日志
    mysqli::errno        — 返回最近函数调用的错误代码
    mysqli::$error_list  — 返回上次执行的命令中的错误列表。
    mysqli::$error       — 返回上一个错误的描述
    mysqli::$field_count — 返回查询的列数。
    mysqli::get_charset  — 返回字符集对象
    mysqli::$client_info — 获取 MySQL 客户端信息
    mysqli_get_client_version    — 作为一个整数返回MySQL客户端的版本
    mysqli::get_connection_stats — 返回客户端连接的统计数据
    mysqli::$host_info        — 返回一个表述使用的连接类型的字符串
    mysqli::$protocol_version — 返回MySQL使用的协议版本号
    mysqli::$server_info      — 返回MySQL服务器的版本号
    mysqli::$server_version   — 作为一个整数返回MySQL服务器的版本
    mysqli::get_warnings — 警告信息
    mysqli::$info        — 返回最近执行的 SQL 语句的信息
    mysqli::init         — 初始化 MySQLi 并返回一个资源类型的值,这个值可以作为 mysqli_real_connect() 函数的传入参数
    mysqli::$insert_id   — 返回最后一条插入语句产生的自增 ID
    mysqli::kill         — 让服务器杀掉一个 MySQL 线程
    mysqli::more_results — 检查批量查询中是否还有查询结果
    mysqli::multi_query  — 执行查询
    mysqli::next_result  — 为读取 multi_query 执行之后的下一个结果集做准备
    mysqli::options      — 设置选项
    mysqli::ping         — ping 一个连接,或者如果连接处于断开状态,重新连接
    mysqli::poll    — 轮询连接
    mysqli::prepare — 准备执行一个 SQL 语句
    mysqli::query   — 对数据库执行一次查询
    mysqli::real_connect       — 建立一个 MySQL 服务器连接
    mysqli::real_escape_string — 根据当前连接的字符集,对于 SQL 语句中的特殊字符进行转义
    mysqli::real_query         — 执行一个mysql查询
    mysqli::reap_async_query   — 获取异步查询的结果
    mysqli::refresh            — 刷新
    mysqli::release_savepoint  — 从当前事务的保存点中移除一个命名保存点
    mysqli::rollback       — 回退当前事务
    mysqli::rpl_query_type — 返回 RPL 查询类型
    mysqli::savepoint      — 在当前事务中增加一个命名保存点
    mysqli::select_db      — 选择用于数据库查询的默认数据库
    mysqli::send_query     — 发送请求并返回结果
    mysqli::set_charset    — 设置默认字符编码
    mysqli::set_local_infile_default — 取消用户指定的回调函数
    mysqli::set_local_infile_handler — 设置 LOAD DATA LOCAL INFILE 命令的回调函数
    mysqli::$sqlstate    — 返回上一次 SQL 操作的 SQLSTATE 错误信息
    mysqli::ssl_set      — 使用 SSL 建立到数据库之间的安全连接
    mysqli::stat         — 获取当前系统状态信息
    mysqli::stmt_init    — 初始化一条语句并返回一个用于mysqli_stmt_prepare(调用)的对象
    mysqli::store_result — 转移上一次查询返回的结果集
    mysqli::$thread_id   — 返回当前连接的线程 ID
    mysqli::thread_safe  — 返回是否是线程安全的
    mysqli::use_result     — 启动结果集检索
    mysqli::$warning_count —返回上次查询中的警告数

     


     

    4 获取MySQLi属性信息

    4.1 打印MySQLi连接信息

    <?php
    $link = new mysqli('localhost','root','root','test');
    $link->set_charset('utf8');
    print_r($link);
    ?>

    打印结果 

    mysqli Object
    (
        [affected_rows] => 0
        [client_info] => mysqlnd 5.0.12-dev - 20150407 - $Id: 241ae00989d1995ffcbbf63d579943635faf9972 $
        [client_version] => 50012
        [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] => 8.0.12
        [server_version] => 80012
        [stat] => Uptime: 306  Threads: 2  Questions: 10  Slow queries: 0  Opens: 111  Flush tables: 2  Open tables: 89  Queries per second avg: 0.032
        [sqlstate] => 00000
        [protocol_version] => 10
        [thread_id] => 10
        [warning_count] => 1
    )

    4.2 打印服务端信息

    <?php
    $link = new mysqli('localhost','root','root','test');
    $link->set_charset('utf8');
    print_r($link->server_info);
    ?>

    打印结果

    8.0.12

    注:获取MySQLi属性的方式都一样,这里就不一一试了,相信大家都可以触类旁通的。

     

    5 常用的MySQLi方法

    创建并选定数据库

    $mysqli = new mysqli('localhost','root','root','test');

    设置字符集

    $mysqli->set_charset('utf8');

    注:如果在创建时没有指定数据库,我们可以通过mysqli::select_db来选择数据库,例如

    $mysqli->select_db('test');

     获取上一次MySQL操作中受影响的行数。

    $mysqli->affected_rows();

    返回上次连接调用中的错误代码。

    $mysqli->connect_errno()

    返回上一个连接错误的描述 

    $mysqli->connect_error();  

    单语句查询(mysqli_result对象将在另一篇文章介绍 

    $sql = 'SELECT * FROM user'; 
    $result = $mysqli->query($sql);

     注:mysqli::query对于SELECT、DESC、SHOW、EXPLAIN、DESCRIBE语句执行成功则返回mysqli_result对象,执行失败则返回false,对于其它的SQL语句的话,执行成功返回true,执行失败返回false。

     

    多语句查询

    $sql = 'SELECT * FROM user'; 
    $sql.= 'SELECT * FROM admin';
    $result = $mysqli->multi_query($sql);

    SQL预处理(mysql_stmt对象将在另一篇文章介绍 )

    $sql = 'SELECT * FROM user WHERE name = ?'; 
    $mysql_stmt = $mysqli->prepare($sql);

    事务处理

    <?php
    $mysql = new mysqli('localhost','root','root','test');
    $mysqli->autocommit(false); 
    $sql  = "UPDATE user SET money = money+100 WHERE name='trevor' ";    
    $sql. = "UPDATE user SET money = money-100 WHERE name='brell' ";  
    $result = $mysqli->multi_query($sql);
    if($result){
    	$mysqli->commit();
    	$mysqli->autocommit(true); 
    }else{
    	$mysqli->rollback();
    }

    关闭数据库连接 

    $mysqli->close();   

     

    6 预告

    mysqli对象、mysqli_result对象、mysqli_stmt对象之间的关系图

    展开全文
  • mysql与mysqli的区别

    千次阅读 2019-05-06 20:29:05
    一.mysql与mysqli的区别: mysqli连接是永久连接,而mysql是非永久连接。 mysql连接:每当第二次使用的时候,都会重新打开一个新的进程。 mysqli连接:一直都只使用同一个进程。 好处:这样就可以很大程度的减轻...

    一.mysql与mysqli的区别:
    mysqli连接是永久连接,而mysql是非永久连接。
    mysql连接:每当第二次使用的时候,都会重新打开一个新的进程。
    mysqli连接:一直都只使用同一个进程。
    好处:这样就可以很大程度的减轻服务器端压力。
    当然,如果mysql也需要永久连接的话,就可以使用mysql_pconnect()这个函数

     
    二.mysqli的使用:
    1.mysqli的面向过程的使用:

    $conn = mysqli_connect('localhost', 'root', '123', 'db_test') or ('error');
    $sql = "select * from db_table";
    $query = mysqli_query($conn,$sql);
    while($row = mysqli_fetch_array($query)){
        echo $row['title'];
    }

    2.mysqli的面向对象的使用:

    $conn = mysqli('localhost', 'root', '123', 'db_test');
    $sql = "select * from db_table";
    $query = $conn->query($sql);
    while($row = $query->fetch_array()){
        echo $row['title'];
    }

    三.mysql_pconnect与mysqli_connect:
    1.mysql_pconnect打开的连接不会关闭(即使调用mysql_close也不会关闭,因为对其无效),类似于连接缓冲池,如果下次有来自于同一个机器的同一个用户名对同一个数据库的连接,php会自动使用上次已经建立的连接,而不需要再重新建立一个。
    好处:是省去了每次与数据库建立连接的开销,
    坏处:是需要浪费一些内存,占用一些连接,
    所以如果用户访问量大的时候会出现错误,要把mysql的max_connections参数改大一点, 或者使用mysql_connect()就解决问题。
    2.简单的来说MySQL_pconnect是用来在php与MySQL间建立一条持续连接,一般php的执行模式是脚本开始执行时初始化所有资源, 脚本运行结束后释放所有资源.
    而MySQL_pconnect的方式则不这样, MySQL_connect每次都是重新通过tcp 等跟sql服务器建立关系, 每次连接都是要消耗不少服务器资源的.
    3.使用pconnect时, 有请求连接MySQL时, php会检查是否之前有条相同的连接(以相同的用户名密码连接到同一个MySQL服务器)已经建立,如果有的话就直接使用这条连接, 值得注意的是这个相同的连接的概念是对进程来说的,不同的进程连接MySQL_pconnect建立会建立起多条连接.
    4.connect与pconnect不会带来功能的差异, 只有性能上的差别.
    5.一般php有俩种运行模式, 一是作为cgi运行, 二是作为apache的模块运行.
    6.作为cgi的时候connect跟pconnect没什么不同, 因为每次cgi进行运行结束后都会被销毁清理掉资源.

    四.结论
    看php手册,如果你是cgi安装方式。pconnection永远也不会生效。
    长连接最大的缺点就是万一一个用户锁死,当前进程就永久锁死了。
    假如你在apache里的设置是进程永不销毁的话就………………

    也就是说尽量使用mysql_connect,因为运行结束后会自动中断,符合编程的风格吧。
    也可以使用mysql_connect和mysql_pconnect一起使用,就好像一个链接缓冲池一样,
    也就是说建立一个有mysql_connect 和 mysql_pconnect的类。
    当然,如果不考虑向下兼容的话,最好还是使用mysqli_connect,因为mysqli本身就是永久性连接。

    1.当使用pconnect时,连接会被重用,连接的生命周期是fpm进程的生命周期,而非一次php的执行。 
    2.如果代码中使用pconnect, close的作用仅是使当前php不能再进行redis请求,但无法真正关闭redis长连接,连接在后续请求中仍然会被重用,直至fpm进程生命周期结束。

    展开全文
  • php7 安装mysqli扩展的坑及解决办法

    万次阅读 2018-10-26 11:44:24
    一、安装步骤 1、找到php7.2 ext目录下的mysqli ...3、在mysqli文件夹下执行 ./configure --with-php-config=/usr/local/php/bin/php-config --with-mysqli=/usr/bin/mysql_config   4、make  5、ma...

    一、安装步骤

    1、找到php7.2 ext目录下的mysqli

    2、输入 /usr/local/php7.2/bin/phpize

    3、在mysqli文件夹下执行 ./configure --with-php-config=/usr/local/php/bin/php-config --with-mysqli=/usr/bin/mysql_config  

    4、make 

    5、make install

    二、遇到的坑

     问题一:找不到mysql_config的话可能是没有安装mysql-devel

    1.需要安装MySQL的源

    2.这时在/etc/yum.repos.d/目录下会出现MySQL的相关repo

     

    3  yum install mysql-devel

    问题二: 在安装mysqli的时候,出现error: ext/mysqlnd/mysql_float_to_double.h: No such file or directory

      解决步骤

    1、vim /home/tmp/php-7.2.11/ext/mysqli/mysqli_api.c   (这里找到你的安装目录)

    2、修改文件第36行的路径

        /ext/mysqlnd/mysql_float_to_double.h

        修改为

       /home/tmp/php-7.2.11/ext/mysqlnd/mysql_float_to_double.h

    展开全文
  • linux mysqli模块的安装

    千次阅读 2018-09-03 00:34:48
    第一步:下载mysqli.sh  wget -c http://down.wdlinux.cn/in/mysqli_ins.sh  ps:如果报错说域名没法解析,就去设置一下dns再下载。设置方法,修改文件  vim /etc/resolv.conf,写入 nameserver 8.8.8.8  第二步...

     第一步:下载mysqli.sh
              wget -c http://down.wdlinux.cn/in/mysqli_ins.sh
              ps:如果报错说域名没法解析,就去设置一下dns再下载。设置方法,修改文件
                  vim /etc/resolv.conf,写入 nameserver 8.8.8.8

            第二步:执行 mysqli_ins.sh
                  如果权限不够 先更改权限chmod 755 mysqli_ins.sh
                  然后执行 ./mysqli_ins.sh 选择php版本进行安装。

            第三步:利用phpize命令生成configure文件。
                    1: 用find命令,查找一下mysqli的文件目录,find / -name "mysqli"
                    2: cd 到mysqli文件目录下,执行 /www/wdlinux/nginx_php-5.2.17/bin/phpize
                    3: ./configure --with-php-config=/www/wdlinux/nginx_php-5.2.17/bin/php-config --with-mysqli=/www/wdlinux/mysql-5.1.63/bin/mysql_config
                    4:   make
                    5:   make test
                    6:   make install
            第四步: 修改php.ini 
                    加入或者去掉注释 extension = "mysqli.so" (如果extension_dir 不对,此处需要写全路径)
                    然后重启web服务器

            访问phpinfo 查看是否有mysqli模块,有就说明安装成功了。

    展开全文
  • pdo和mysqli的区别

    千次阅读 2018-07-22 20:55:07
    1、PDO能够支持其它非MySQL的数据库,而MySQLi专门针对MySQL设计的 2、连接 // PDO $pdo = new PDO("mysql:host=localhost;dbname=database", 'username', 'password'); // mysqli, procedural way $...
  • 原先在做网页时,php连接Mysql数据库时,总使用...&lt;?...$conn=mysql_connect("localhost","root","root"... die('Could not connect:'.mysql_error());...it done well.It has been ...
  • php使用mysqli

    千次阅读 2018-10-19 04:44:01
  • mysql_fetch_assoc 得到的是关联数组。 mysql_fetch_array 可以得到关联数组也可以得到索引数组,也可以二者都有。   假如从数据库取出一个用户的用户名和密码   username password ......
  • mysqli_change_user() 函数

    2019-03-31 20:14:19
    查看更多 https://www.yuque.com/docs/share/328718dc-a5ed-4bd4-9904-befc552f4026
  • mysqli循环中的php循环

    2019-09-29 14:09:16
    $mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbselect); if (mysqli_connect_error()) { die('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error()); } // Start throwing ...
  • php7.4无法开启mysqli拓展

    千次阅读 2019-12-23 18:21:58
    当PHP安装后,如果期望使用则可以通过一些配置来开启mysqli并指定客户端库。 mysqli扩展默认并不会开启,因此php.ini中php_mysqli这个DLL 必须开启。为此你需要找到php.ini文件(通常在您安装的php文件夹下),并且...
  • 网上有很多开启mysqli等php扩展的解决方案,都是复制啊,啥的,让我们这些后来的人也不好找。我花了很长时间才弄好,下面我把具体配置php扩展的方案简单明了的告诉大家  第一步 打开你放置php的文件夹会看到一个...
  • mysqli_fetch_array()来使用或输出所有查询的数据。 mysqli_fetch_array()函数从结果集中取得一行作为关联数组,或数字数组,或二者兼有 返回根据从结果集取得的行生成的数组,如果没有更多行则返回 false。 ...
  • 为什么尽量使用mysqlimysqli连接是永久连接,而MySQL是非永久连接。mysql连接:每当第二次使用的时候,都会重新打开一个新的进程。mysqli连接:一直都只使用同一个进程。好处:这样就可以很大程度的减轻服务器端...
  • <p>I understand in some way the differences between <code>mysqli_fetch_row, <code>mysqli_fetch_object, <code>mysqli_fetch_assoc</code> and <code>mysqli_fetch_array</code>. <p>My question is if they ...
  • php7配置mysqli和使用mysqli连接mysql

    万次阅读 2017-04-01 09:22:05
    php7 Class 'mysqli' not found in
  • mysqli 数据库操作类

    2019-07-24 17:33:37
    一、mysqli类操作mysql数据库的介绍 1、从PHP5.0开始可以使用mysql(i), 是一个面向对象的技术(新加功能都会以对象形式添加) 2、i:表示改进,1. 功能增加了, 2,效率大大增加(以后的PHP项目改成mysqli),3,更...
  • mysqli_fetch_array() 来使用或输出所有查询的数据。 mysqli_fetch_array() 函数从结果集中取得一行作为关联数组,或数字数组,或二者兼有 返回根据从结果集取得的行生成的数组,如果没有更多行则返回 false。 使用...
  • 使用var_dump返回的mysqli_result结果显示是查询成功的,但是在返回时,会是SQL查询结果集。具体结果集各项代表什么参考[https://blog.csdn.net/wsll581/article/details/72872261 ,按理说在num_rows:int(1)时,...
  • 之前配置了好久的mysqli模块,但是都没有成功。写这篇博客,也是方便以后自己配置mysqli不会再出现这样的错误,也希望大家不会出现这样的错误。 首先windows搜索栏中输入cmd,打开命令提示符窗口,输入php -v,就...
1 2 3 4 5 ... 20
收藏数 54,598
精华内容 21,839
关键字:

mysqli