mysqli编译php(mysql 编译)

发布时间:2022-11-10

本文目录一览:

  1. 如何重新编译PHP使其支持mysqli
  2. PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
  3. php 5.2.8不支持mysqli扩展库吗
  4. php怎么用mysqli链接数据库和输出sql
  5. linux下的php到底是怎么加载mysqli模块的
  6. nginx和php 怎么安装mysqli扩展

如何重新编译PHP使其支持mysqli

添加扩展的基本步骤:

  1. 进入PHP源代码目录:
    # cd /tmp/php-5.2.14/
    
  2. 再进入要添加的mysqli扩展源码目录:
    # cd ext/mysqli/
    
  3. 调用已经编译好的php里面的phpize:
    # /usr/local/php/bin/phpize
    
  4. 然后configure:
    # ./configure --with-php-config=/usr/local/php/bin/php-config --with-mysqli=/usr/local/MySQL/bin/mysql_config
    
    (/usr/local/mysql 为mysql的安装目录)
  5. 编译安装:
    # make
    # make install
    
  6. 编译之后,自动把mysqli.so放到了默认的php扩展目录下,我的为:
    /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/
    
    (可通过phpinfo查看或者执行命令 /usr/local/php/bin/php-config --extension-dir
  7. 修改php.ini,找到extension_dir,修改为:
    extension_dir="./"
    
  8. 在下面添加:
    extension=mysqli.so
    

保存即可。

PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...

背景:把mysql换成mysqli时出现,连接数过多,其实际上并不是,原因是我挪动了一下php的sock文件位置导致,因这几个socket修改没有修改完全,于是出现了too many connections。 从mysql里 show processlist 并没有发现真的有连接,其实用tshark抓下包估计能看到,并没有发出请求,而估计是mysqli的客户端自己报出来的。

排查要点如下:

出现场景:手动编译安装mysql,并制定安装位置,php以localhost方式连接mysql。 原因分析:手动编译安装制定位置后所有的mysql文件都在制定的目录或者data目录下面,php默认只会寻找 /tmp/mysql.sock 找这个sock文件,所以会导致sock文件无法找到。

解决方法:

  1. 给sock文件做个软链:
    ln -s /data/mysqldb/mysql.sock /tmp/mysql.sock
    
  2. 修改php的默认mysql.sock连接地址:
    mysql.default_socket=/data/mysqldb/mysql.sock
    
  3. 使用TCP socket的方式进行连接:
    mysql('127.0.0.1','username','password');
    

php 5.2.8不支持mysqli扩展库吗

mysqli.dll 是PHP对mysql新特性的一个扩展支持。在PHP5中可以在php.ini中加载。 mysql后面的i,指improved, interface, ingenious, incompatible or incomplete(该扩展仍在开发中,因为MYSQL4.1和MYSQL5都没有正式推出尚在开发中,新的特性没有完全实现)。

mysqli想实现的目标具体有:

  • 更简单的维护
  • 更好的兼容性
  • 向后兼容 mysql(指PHP中的模块)发展到现在显得比较凌乱,有必要重新做下整理。同时,有必要跟上MYSQL(DBMS)的发展步伐,加入新的特性的支持,以及适应MYSQL(DBMS)以后的版本。所以诞生了 mysqli.dll

mysqli.dll的特性:

  • 可以和mysql.dll一样的方式使用
  • 支持OO接口,简简单单调用
  • 支持MYSQL4.1引入的新特性
  • 通过 mysqli_init() 等相关函数,可以设置高级连接选项

php怎么用mysqli链接数据库和输出sql

一、mysql与mysqli的概念相关:

  1. mysql与mysqli都是php方面的函数集,与mysql数据库关联不大。
  2. 在php5版本之前,一般是用php的mysql函数去驱动mysql数据库的,比如 mysql_query() 的函数,属于面向过程。
  3. 在php5版本以后,增加了mysqli的函数功能,某种意义上讲,它是mysql系统函数的增强版,更稳定更高效更安全,与 mysql_query() 对应的有 mysqli_query(),属于面向对象,用对象的方式操作驱动mysql数据库。

二、mysql与mysqli的区别:

  1. mysql是非持久连接函数,mysql每次链接都会打开一个连接的进程。
  2. mysqli是持久连接函数,mysqli多次运行mysqli将使用同一连接进程,从而减少了服务器的开销。mysqli封装了诸如事务等一些高级操作,同时封装了DB操作过程中的很多可用的方法。

三、mysql与mysqli的用法:

1. mysql(过程方式):

$conn = mysql_connect('localhost', 'user', 'password'); // 连接mysql数据库
mysql_select_db('data_base'); // 选择数据库
$result = mysql_query('select * from data_base'); // 第二个可选参数,指定打开的连接
$row = mysql_fetch_row($result); // 只取一行数据
echo $row[0]; // 输出第一个字段的值

PS:mysqli以过程式的方式操作,有些函数必须指定资源,比如 mysqli_query(资源标识, SQL语句),并且资源标识的参数是放在前面的,而 mysql_query(SQL语句, '资源标识') 的资源标识是可选的,默认值是上一个打开的连接或资源。

2. mysqli(对象方式):

$conn = new mysqli('localhost', 'user', 'password', 'data_base'); // 要使用new操作符,最后一个参数是直接指定数据库
// 假如构造时候不指定,那下一句需要 $conn->select_db('data_base') 实现
$result = $conn->query('select * from data_base');
$row = $result->fetch_row(); // 取一行数据
echo $row[0]; // 输出第一个字段的值

使用 new mysqli('localhost', 'username', 'password', 'databasename'); 会报错,提示如下:

Fatal error: Class 'mysqli' not found in ...

一般是mysqli没有开启的,因为mysqli类不是默认开启的,win下要改php.ini,去掉 php_mysqli.dll 前的 ;,linux下要把mysqli编译进去。

四、mysql_connect()与mysqli_connect()

  1. 使用mysqli,可以把数据库名称当作参数传给 mysqli_connect() 函数,也可以传递给mysqli的构造函数;
  2. 如果调用 mysqli_query() 或 mysqli 的对象查询 query() 方法,则连接标识是必需的。

linux下的php到底是怎么加载mysqli模块的

添加扩展的基本步骤:

  1. 进入PHP源代码目录:
    # cd /tmp/php-5.2.14/
    
  2. 再进入要添加的mysqli扩展源码目录:
    # cd ext/mysqli/
    
  3. 调用已经编译好的php里面的phpize:
    # /usr/local/php/bin/phpize
    
  4. 然后configure:
    # ./configure --with-php-config=/usr/local/php/bin/php-config --with-mysqli=/usr/local/MySQL/bin/mysql_config
    
    (/usr/local/mysql 为mysql的安装目录)
  5. 编译安装:
    # make
    # make install
    
  6. 编译之后,自动把mysqli.so放到了默认的php扩展目录下,我的为:
    /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/
    
    (可通过phpinfo查看或者执行命令 /usr/local/php/bin/php-config --extension-dir
  7. 修改php.ini,找到extension_dir,默认路径为:
    extension_dir="./"
    
    我修改后才启动加载的,在下面添加:
    extension=mysqli.so
    

保存即可。 8. 重启apache:

# service httpd restart

nginx和php 怎么安装mysqli扩展

在 CentOS 下编译安装 PHP 时,有时候经常会忘了某些扩展,比如 pdo,mysqli,但是到扩展目录下,我们又找不到相应的扩展文件(.so 文件),这样的情况下只能编译安装该模块,生成对应的 so 文件,然后在 php.ini 中添加相应的扩展记录,重启 php 就可以了,我们以安装 mysqli 为例。

安装步骤:

  1. 首先进入 php 源码包,如果找不到可以下载一个:
    tar xvzf php-5.2.17.tar.gz
    cd php-5.2.17/ext/mysqli/
    
  2. 然后运行 php 安装目录下的 phpize:
    /usr/local/nginx_php-5.2.17/bin/phpize
    
  3. 然后编译安装 mysqli 扩展:
    ./configure --prefix=/usr/local/mysqli --with-php-config=/usr/local/nginx_php-5.2.17/bin/php-config --with-mysqli=/usr/local/mysql/mysql_config
    make
    make install
    
  4. 然后在 php 的扩展目录下已经生成了 mysqli.so 文件。
  5. 打开 php.ini 文件,看是否有如下内容:
    extension_dir = "/usr/local/nginx_php-5.2.17/lib/php/extensions/no-debug-non-zts-20060613/"
    
  6. 如果没有就添加上,再添加一条:
    extension=mysqli.so
    

保存。 7. 重启 php。可以看到 mysqli 已经安装完成了。