iis+apache不能连接mysql的问题

网上找了很多资料,调试了好久,终于解决了这个难题。

修改php.ini里的
extension_dir = “./” 为 extension_dir = “D:\PHP5\ext”

注:D:\PHP5 是我的php目录。

在环境变量Path里面添加 D:\PHP5\;D:\PHP5\ext;

网上说的将 lib文件拷到windows/system32目录下 这个是没必要的,设置好Path环境变量就可以了。
我因为误将 Mysql/bin 目录下的libmySQL.dll复制到了windows/system32目录下,导致php链接mysql时
出现 0x0075ac50 内存不能为read 的错误。后来还是进了安全模式,删除几个system32目录下的几个dll才解决了这个难题。


以下为引用网文
我以前碰到过一模一样的问题, 折腾了很久才搞清楚.
在”mysql的安装目录\bin”中, 有一个libmySQL.dll, 而在安装mysql的时候, windows installer版的安装
程序会问我们要不要把”mysql安装目录\bin”放入环境变量path中, 一般我们都会同意放入path中.
然后在装完php和apache时, 我们需要把php扩展的环境变量手动添加到path中, 一般就是我们会把
这个路径添加到path的最后
然后在apache的phpmodule调用mysql的库来访问mysql时, 会首先查找libmysql.dll文件, 然后这个dll
会使用php ext里的dll来完成访问工作.
问题就出在这里了, 因为在path中mysql的环境变量在php环境变量的前面, 所以libmysql.dll文件时
mysql的, 而他所需要的dll文件却是有php ext来提供的, 而php ext也提供了自己的libmysql.dll,却由于
优先级问题, 而并没有被使用, 而按照我刚才所描述的安装方式会造成用mysql带的libmysql.dll来访问
php ext带的其他dll文件的问题, 这样会造成版本不一致而出现崩溃. 决绝方法很简单, LS的方式是将
php ext的libmysql放到system32, 认为提升这个dll的优先级, 另外一种也是我推荐的方式, 就是在
path设置中改变php ext目录和mysql bin目录的顺序, 或者直接删掉mysql bin.

Tags: , ,

Leave a Comment