·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> php网站开发 >> PHP初学留神(三)

PHP初学留神(三)

作者:佚名      php网站开发编辑:admin      更新时间:2022-07-23
php初学留神(三)

星期一进行面试结束后,意味着我的考研日子也结束了,以及我的2013。在好好总结之后还不能停止学习,心想着要把算法继续学下去,还有linux。不过呢,始终都要记住尼采老师的这句当头棒喝:“不加选择的知识冲动,正如不分对象的性冲动,都是下流的标志。”嗯嗯,我们继续。

一.读取数据库乱码问题

这个问题在开始学习连接数据库时就出现过,不过当时的解决方法忘记了。其结果就是在百度、谷歌上纠结了1天。纠结着从数据库的编码修改到网页文件的编码修改,以及MySQL的my.ini文件参数修改,都没有解决问题。页面中文显示"??"就证明了问题不是出现在数据库(如果是,数据库的表项就应该是乱码),也不是网页页面的编码(如果是,页面会出现混乱的字符而不是??),而问题是出在php连接数据库时没有设置数据库输出的格式。最后解决问题参考的是这篇博客《解决PHP写入、读取MYSQL数据库时中文乱码问题》,谢谢Jankerli。问题的关键就在mysqli类。这个类是扩展了php操作mysql的功能。所以网络上通行的在连接数据库后的mysql_query(“set names utf8&PRime;)就起不了作用了。而是写这句话。

1 $result = new mysqli('localhost', 'username’, 'passWord', 'databasename');2 $result->set_charset('utf8'); 

至于MySQL与mysqli的比较,各有优缺点吧。请记住这句话,“如果你是使用MySQL4.1.3或更新的服务端版本,强烈建议你使用mysqli 扩展替代它。”。

二.fetch

在做网站时用到了一系列含有fetch的函数,现总结总结。

1.fetch_object()

1 $result = $conn->query($query);2 3 if($result->num_rows > 0){4     $customer = $result->fetch_object();5     $customerid = $coustomer->$customerid;6 }

解释一下该代码。首先,使用MYSQLi类的方法,执行查询语句,返回一个mysqli_result类的实例($result)。在判断结果有效后,使用$result对象的方法fetch_object()返回记录集中的当前一行记录作为一个对象。最后在根据需要进行传值。

2.fetch_assoc()

1 $result = @$conn->query($query);2 if (!$result) {3     return false;4 }5 6 $result = @$result->fetch_assoc();7 return $result;

同样也是一个mysqli_result类的实例($result),但取得的是一个关联数组(associative array)。那么什么是关联数组呢?这是一种数据结构。与索引数组相比,关联数组的每个I键(key)都关联一个值(value)。通过关联数组,我们可以把values关联到keys。具体就是在定义数组时,使用逗号分隔的键(key)=>值(value)对来进行映射。所以使用这里的$result时,不再用$result->$id,而是$result[‘id’]。这就是他俩的区别。

3.fetch_row()

 1 $num_cats = @$result->num_rows; 2 f($num_cats == 0){ 3     return false; 4 } 5 $row = $result->fetch_row(); 6 if(isset($row)){ 7     return $row->catname; 8 }else{ 9     return null;10 }

在检查完查询语句结果有效后,取得一个枚举数组($row)。至于与关联数组除了概念上的区别,我就知道foreach循环可以遍历关联数组; 而for循环只能遍历枚举数组, 不能遍历关联数组。其他的还有待学习。

最后提一句,$result->fetch_object()等价于mysqli_fetch_object()。前者是面向对象风格,后者是过程化风格。当然是推荐前者了。