[转载]在php-5.1.4中使用mysqli
作者: piggy 发布日期: 2006-6-20 查看数: 65 出自: http://www.phpx.com/viewarticle.php?id=119200
我一直都在用php4,很少接触php5。由于学习的需要,慢慢去接触了php5,了解了php5的面向对象,MySQL i扩展库,SPL及pdo等等新的特性。请别笑,我对php5接触得还是比较少。 为了能够使用php5,我搭建了php-5.1.4 mysql-5.0.22 IIS-5.1运行环境,安装php及mysql的资料比较多,这里不重复了。 我进阶的第一个目标就是mysqli,为了使用mysqli,你得在php.ini里增加一行extension=php_mysqli.dll,这个dll内置在php5.1.4的ext文件夹里,重启www服务即可以使用mysqli扩展库了(部份用户可能需要重启)。 配置完后,使用mysqli的面向对象编程方式编写如下代码: [php] <?php $db = new mysqli("localhost","root","123456","test"); $db->set_charset("utf8"); $rs = $db->query("SELECT * FROM `gallery_ablum`"); while($row = $rs->fetch_assoc()) { echo $row['Name'],"
"; } $rs->close(); $db->close(); ?> [/php] 兴冲冲的放在网站下运行该代码,结果却发现脚本有错误“使用了未定义的set_charset函数”,难道pphp5.1.x不再支持mysqli?于是我注释了第二行,结果却发现,程序是成功执行成功的!我很开心,终于可以显示数据了,虽然有一部份数据是乱码(乱码是因为我用了utf8编码,而mysqli连接默认用了laint1) 接下来我一口气试了mysqli里的函数,结果发现大部份还是可用的。但字符集的问题就不可以解决了吗?如果不能解决,对用其它数据库编码的的程序,就不能使用了。于是我试试将第二行的语句换成$db->query("SET NAMES utf8");,执行成功,却没能像我预期中的那样解决了乱码,使用echo $db->character_set_name();查看当前的编码,还是laint1。 我还不死心,上php.net里查看资料,终于知道php.net里发布的php_myqli.dll真的不能使用这个函数,而mysql却提供了这个dll。下载地址是:http://dev.mysql.com/downloads/connector/php,这个页面里,mysql声明这个connector与php.net提供的唯一区别就是:mysql提供的是最新版本的!而且mysql建议我们使用php5.1.4及mysql5.0.22,所以也只提供了这二个相关的connector下载。 connector的安装很简单,停止www服务覆盖根目录下的libmysql.dll及ext目录下的php_mysqli.dll文件即可。 当我开心的打开浏览器执行前面的代码时,却出现“Unable to load dynamic library php_mysqli.dll ,无法加载”的错误。我即刻晕倒。难道php与mysql真的是不是冤家不对头吗? 我还是很不情愿,不甘心这样放弃我的php5之路,于是我上google查资料,搜索出来的结果比较一致的说法是缺少libmysql.dll,需要将这个库放到php路径里或system32里。我的php目录里明明有libmysql.dll呀(这个libmysql.dll是mysql connector里提供的),难道要放在system32里?copy一份libmysql.dll到system32,重启再执行php,还是失败。 后来我上mysql.com的技术支持里查资料,看能不能找到一些头绪。经过大量的浏览后,发现有一个人说用depends来查查,刚开始我还以为是一个自行开发的软件,作者在此作一个广告,不过后来我真的没有办法了,只有死马当活马医了,上去http://www.dependencywalker.com下载了一个depends work,原来这个东西是一个类似于脱壳的软件。结果我用它查到了mysql的connector里用了vc7来编译dll的,而我的机器是没有安装vc7的运行库,所以不能装载php_mysqli.dll。 原因找到了,我立即就上http://www.dll-files.com/dllindex/dll-files.shtml?msvcr71下载msvcr71.dll运行库,拷贝到system32系统目录下(顺便把刚才copy进来的libmysql.dll删除了,在php目录下保持一份就可以了),重启,浏览,终于可以执行mysql新的特性了。 (注:为了方便自己的调试,我打开了php.ini里的display_errors及display_startup_errors) 上面是我解决的整个过程,实质上的步骤无需这么多,安装完php5.1.4后,上mysql网站下载mysql的php connector覆盖php目录下的相应文件。再搜索下自己系统盘里是否有msvcr71.dll这个文件,如果不存在于系统目录里,就下载一个并放入system32系统目录里。 另外,如果系统是ntfs的格式,还得注意权限的问题。特别是刚才从网上下载过来的文件,默认的权限可能不够。如果打开了display_startup_errors参数,会有Unable to load dynamic library ***.dll 拒绝访问的字眼。这时你就得注意下权限的问题了。 第一次这么认真发贴,主要是想一些刚学mysqli的朋友提供点有用的资料,而不是讨论mysqli好不好的问题。由于,也很希望能与大家继续讨论下php5里的新特性,特别是pdo及pear方面,我的邮箱zhiouzhu(at)gmail.com,欢迎你们的指点。
转载于:https://www.cnblogs.com/huang/archive/2006/08/16/478339.html