本文目录一览:
- 如何重新编译PHP使其支持mysqli
- PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
- php 5.2.8不支持mysqli扩展库吗
- php怎么用mysqli链接数据库和输出sql
- linux下的php到底是怎么加载mysqli模块的
- nginx和php 怎么安装mysqli扩展
如何重新编译PHP使其支持mysqli
添加扩展的基本步骤:
- 进入PHP源代码目录:
# cd /tmp/php-5.2.14/
- 再进入要添加的mysqli扩展源码目录:
# cd ext/mysqli/
- 调用已经编译好的php里面的phpize:
# /usr/local/php/bin/phpize
- 然后configure:
(/usr/local/mysql 为mysql的安装目录)# ./configure --with-php-config=/usr/local/php/bin/php-config --with-mysqli=/usr/local/MySQL/bin/mysql_config
- 编译安装:
# make # make install
- 编译之后,自动把mysqli.so放到了默认的php扩展目录下,我的为:
(可通过phpinfo查看或者执行命令/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/
/usr/local/php/bin/php-config --extension-dir
) - 修改php.ini,找到extension_dir,修改为:
extension_dir="./"
- 在下面添加:
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文件无法找到。
解决方法:
- 给sock文件做个软链:
ln -s /data/mysqldb/mysql.sock /tmp/mysql.sock
- 修改php的默认mysql.sock连接地址:
mysql.default_socket=/data/mysqldb/mysql.sock
- 使用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的概念相关:
- mysql与mysqli都是php方面的函数集,与mysql数据库关联不大。
- 在php5版本之前,一般是用php的mysql函数去驱动mysql数据库的,比如
mysql_query()
的函数,属于面向过程。 - 在php5版本以后,增加了mysqli的函数功能,某种意义上讲,它是mysql系统函数的增强版,更稳定更高效更安全,与
mysql_query()
对应的有mysqli_query()
,属于面向对象,用对象的方式操作驱动mysql数据库。
二、mysql与mysqli的区别:
- mysql是非持久连接函数,mysql每次链接都会打开一个连接的进程。
- 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()
- 使用mysqli,可以把数据库名称当作参数传给
mysqli_connect()
函数,也可以传递给mysqli的构造函数; - 如果调用
mysqli_query()
或 mysqli 的对象查询query()
方法,则连接标识是必需的。
linux下的php到底是怎么加载mysqli模块的
添加扩展的基本步骤:
- 进入PHP源代码目录:
# cd /tmp/php-5.2.14/
- 再进入要添加的mysqli扩展源码目录:
# cd ext/mysqli/
- 调用已经编译好的php里面的phpize:
# /usr/local/php/bin/phpize
- 然后configure:
(/usr/local/mysql 为mysql的安装目录)# ./configure --with-php-config=/usr/local/php/bin/php-config --with-mysqli=/usr/local/MySQL/bin/mysql_config
- 编译安装:
# make # make install
- 编译之后,自动把mysqli.so放到了默认的php扩展目录下,我的为:
(可通过phpinfo查看或者执行命令/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/
/usr/local/php/bin/php-config --extension-dir
) - 修改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 为例。
安装步骤:
- 首先进入 php 源码包,如果找不到可以下载一个:
tar xvzf php-5.2.17.tar.gz cd php-5.2.17/ext/mysqli/
- 然后运行 php 安装目录下的 phpize:
/usr/local/nginx_php-5.2.17/bin/phpize
- 然后编译安装 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
- 然后在 php 的扩展目录下已经生成了 mysqli.so 文件。
- 打开 php.ini 文件,看是否有如下内容:
extension_dir = "/usr/local/nginx_php-5.2.17/lib/php/extensions/no-debug-non-zts-20060613/"
- 如果没有就添加上,再添加一条:
extension=mysqli.so
保存。 7. 重启 php。可以看到 mysqli 已经安装完成了。