近来安装了一个开源的电子商务系统Zencart,该系统以商店立场设计项目,并支持热安装,在用户中反响颇好。该系统用PHP开发,支持MYSQL等数据库。在我的安装过程中,因为PHP无法MYSQL错误折腾了好几天,特此记下,供同遇此问题的朋友们查解。
 
因为我用IIS作WEB服务器,所以按网络上加了ISAPI筛选器,MYSQL下了最新的5.2.0, PHP用了5.2.5,都是最新的。在安装ZenCart项目时,总是被提醒MYSQL未被PHP支持而无法进行下去。经网络查到,很多朋友也碰到此类问题,甚至于有人说过程经测试肯定能解决的方法也在我这儿行不通。什么extension_dir,extension=php_mysql.dll 都按要求改好,并放到系统目录去了,还有的要把所有PHP动态库放到windows\system32去,有的说把PHP的BIN目录下libmysql.dll放到system32目录,有的要把MYSQL的libmysql.dll放到system32目录,MYSQL用命令能联接正常。
我只好自己做一步一步的排查了。首先用命令PHP执行一个简单的PHP脚本:
         if (mysql_connect('localhost', 'root', 'pass') == false ) {
            echo "error in connect";
          } else {
            if (!mysql_select_db('mysql')) {
              echo "Error in select db";
            } else {
             $result=mysql_query("select user from user");
             while($array1=mysql_fetch_array($result)){
              echo $array1["user"]."\n";
             }             
              mysql_close();
            }
          }
?>
结果发现PHP.exe能正常解释运行。用IE就不行,ISAPI不行?不过PHP+MYSQL+IIS的应用很多都好好的呀!用DEPENDENCIES工具查看,没有看到有用的排查信息。我想DISCUZ等开源项目都这么部署可以成功,肯定是自己的版本有问题。PHP的?还是MYSQL的?我下了PHP 4.4.8, 5.2.4,也下了MYSQL 5.0.51b,因为MYSQL 5.0.X是我在LINUX一直用的版本,比较放心,流行的时间也长了,估计兼容性好一点。结果换用了MYSQL 5.0.51b,并把PHP的libmysl.dll拷贝至system32,所有问题迎刃而解。回头看,有的网上文章说MYSQL的动态库需要复制到系统库目录,有的说PHP的需要复制,大概都是MYSQL和PHP版本不同,有的兼容,有的不兼容,有时用MYSQL的可被PHP支持,有的PHP本身的动态库就能支持MYSQL连接(也是PHP安装支持MYSQL的标准过程),主要看MYSQL的版本能否被支持,PHP的版本能否提供支持。
网上搜索到太多的相关方案,没有一个提供如上的分析结果,不能不说信息爆炸时代的苦恼。太多重复的内容挡住了我搜索真正解决方法的机会。浪费了很多天的时间在此问题上。
网络给予我方便的同时,也强加了某种不方便。