本文目录一览:
- 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/
2、调用已经编译好的php里面的phpize:# /usr/local/php/bin/phpize
3、然后configure:# ./configure --with-php-config=/usr/local/php/bin/php-config --with-mysqli=/usr/local/MySQL/bin/mysql_config
(/usr/local/mysql 为mysql的安装目录)
4、make make install
5、编译之后,自动把mysqli.so放到了默认的php扩展目录下,我的为 /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/
(phpinfo可查看或者执行命令/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的客户端自己报出来的,别看这个问题小,搞了老半天,都想重新安装Php了,发现原来是路径写错了同时mysqli的客户端提示连接数过多的误提示导致方向走错了。如下:
[root@iZ25z0ugwgtZ
etc]#
grep
-r
"mysql.sock"
./
./php.ini:pdo_mysql.default_socket=/data/runsock/mysqlsock/mysql.sock
./php.ini:;mysql.default_socket
=
/tmp/mysql.sock
./php.ini:mysql.default_socket
=
/data/runsock/mysqlsock/mysql.sock
./php.ini:mysqli.default_socket
=
/data/runsock/mysql.sock
//这个位置被挪动到,/data/runsock/mysqlsock/mysql.sock导致。
修改后记得重启动php-fpm:
[root@iZ25z0ugwgtZ
etc]#
service
php-fpm
restart
Gracefully
shutting
down
php-fpm
.
done
Starting
php-fpm
done
______________________排查要点如下_______________________________
warning:
mysqli::real_connect():
(hy000/1040):
too
many
connections
in:
出现场景
:手动编译安装mysql,并制定安装位置,php以localhost方式连接mysql
原因分析
:手动编译安装制定位置后所有的mysql文件都在制定的目录或者data目录下面,php默认只会寻找/temp/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','passwod');
下面给大家介绍PHP
mysql_connect()
函数
定义和用法
mysql_connect()
函数打开非持久的
MySQL
连接。
语法
mysql_connect(server,user,pwd,newlink,clientflag)
参数
描述
server
可选。规定要连接的服务器。
可以包括端口号,例如
"hostname:port",或者到本地套接字的路径,例如对于
localhost
的
":/path/to/socket"。
如果
PHP
指令
mysql.default_host
未定义(默认情况),则默认值是
'localhost:3306'。
user
可选。用户名。默认值是服务器进程所有者的用户名。
pwd
可选。密码。默认值是空密码。
newlink
可选。如果用同样的参数第二次调用
mysql_connect(),将不会建立新连接,而将返回已经打开的连接标识。参数
new_link
改变此行为并使
mysql_connect()
总是打开新的连接,甚至当
mysql_connect()
曾在前面被用同样的参数调用过。
clientflag
可选。client_flags
参数可以是以下常量的组合:
MYSQL_CLIENT_SSL
-
使用
SSL
加密
MYSQL_CLIENT_COMPRESS
-
使用压缩协议
MYSQL_CLIENT_IGNORE_SPACE
-
允许函数名后的间隔
MYSQL_CLIENT_INTERACTIVE
-
允许关闭连接之前的交互超时非活动时间
返回值
如果成功,则返回一个
MySQL
连接标识,失败则返回
FALSE。
提示和注释
注释:脚本一结束,到服务器的连接就被关闭,除非之前已经明确调用
mysql_close()
关闭了。
提示:要创建一个持久连接,请使用
mysql_pconnect()
函数。
例子
?php
$con
=
mysql_connect("localhost","mysql_user","mysql_pwd");
if
(!$con)
{
die('Could
not
connect:
'
.
mysql_error());
}
//
一些代码...
mysql_close($con);
?
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', usenamer', '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/
2、调用已经编译好的php里面的phpize:# /usr/local/php/bin/phpize
3、然后configure:# ./configure --with-php-config=/usr/local/php/bin/php-config --with-mysqli=/usr/local/MySQL/bin/mysql_config
(/usr/local/mysql 为mysql的安装目录)
4、make make install
5、编译之后,自动把mysqli.so放到了默认的php扩展目录下,我的为 /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/
(phpinfo可查看或者执行命令/usr/local/php/bin/php-config --extension-dir )
再修改php.ini 找到extension_dir 默认路径为 extension_dir="./" 我修改后才启动加载的
在下面添加extension = "mysqli.so" 保存即可
extension_dir="/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"
extension = "mysqli.so"
6、重启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
cdphp-5.2.17/ext/mysqli/
然后运行 php 安装目录下的 phpize
/usr/local/nginx_php-5.2.17/bin/phpize
(根据自己的 php 安装目录来查找,不一定是这个目录,如果找不到,可以根据 phpinfo() 来查看)然后编译安装 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
保存。
重启 php。可以看到 mysqli 已经安装完成了。