代码改变世界

php查询数据集的几种方式(mysql_unbuffered_query()与mysql_query()的区别)

2014-12-25 16:43  Lasthelloworld  阅读(804)  评论(2编辑  收藏  举报

php操作数据集几种方式

一、        mysql_unbuffered_query()

一边查询一边给出结果,不缓存在页面当中,适合大数据处理,使用完成后,就自动销毁数据集.

  1. 不能再使用mysql_data_set($result,count)重新定位数据集中游标的启示位置。
  2. mysql_unbuffered_query查询的结果集中,类似mysql_fetch_array处理过程中,不可以使用mysql_num_rows获取结果集行数。
  3. mysql_unbuffered_query查询的结果集中,类似mysql_fetch_array处理过程完成后,可以使用mysql_num_rows获取结果集行数。
  4. 之后再次操作使用类似mysql_fetch_array的函数操作数据集,将没有数据集行数为0,将不输出。

二、        mysql_query()

查询结果出来全部放在缓存里面,实用于数据量小的方便操作。

  1. 类似mysql_fetch_array的函数在操作过程中还是操作完成后,mysql_num_rows都可以获得正确的数据行数。
  2. mysql_data_set($result,count)可以在任意位置操作数据集的下表。
  3. mysqli_free_result($result);清除内存中的查询集后,同mysql_unbuffered_query()。

demo:

列子:标红部分为关键比较代码

  1 <?php
  2 
  3  
  4 
  5 /*
  6 
  7  * 连接数据库
  8 
  9  * 固定不变的量,就直接用变量例如$mysql_host,变化的量例如$this->$mysql_dbname,表示当前调用者的dbname
 10 
 11  */
 12 
 13  
 14 
 15 header("Content-Type:text/html;charset=utf-8");
 16 
 17  
 18 
 19  class DbConn{
 20 
 21    
 22 
 23     private $mysql_host;//连接的主机
 24 
 25     private $mysql_user;
 26 
 27     public $mysql_pwd;
 28 
 29     private $mysql_language;//数据库编码语言
 30 
 31     private $mysql_conn;//Mysql连接对象
 32 
 33     private $db_select; //选择的数据库对象
 34 
 35    
 36 
 37     public $mysql_dbname;//选择要连接的数据库
 38 
 39     public $sqlstr;//sql语句
 40 
 41     public $error;//错误信息提示
 42 
 43    
 44 
 45     function DbConn(){
 46 
 47         $this->mysql_host ="localhost";
 48 
 49         $this->mysql_user="root";
 50 
 51         $this->mysql_pwd="sasa";
 52 
 53         $this->mysql_language="UTF8";
 54 
 55         $this->mysql_conn=NULL;
 56 
 57         $this->db_select=NULL;
 58 
 59         $this->sqlstr="";
 60 
 61       
 62 
 63     }
 64 
 65    
 66 
 67     //设置错误信息
 68 
 69     private  function SetError($errormsg)
 70 
 71     {
 72 
 73         $this->error+="</br>"+$errormsg;
 74 
 75     }
 76 
 77    
 78 
 79     public  function ShowError()
 80 
 81     {
 82 
 83         return $this->error;
 84 
 85     }
 86 
 87  
 88 
 89  
 90 
 91     //连接mysql
 92 
 93     public function Connect()
 94 
 95     {
 96 
 97         $this->mysql_conn = mysql_connect($this->mysql_host, $this->mysql_user,$this->mysql_pwd) or die("mysql连接错误"); //mysql连接
 98 
 99         $this->SetError(mysql_error());
100 
101         //选择连接的数据库名
102 
103         $this->db_select = mysql_select_db($this->mysql_dbname) or die("数据库无权限或数据库选择错误");
104 
105         $this->SetError(mysql_error());
106 
107         mysql_query("set names 'utf8'"); //编码转化
108 
109     }
110 
111  
112 
113     //关闭连接
114 
115     public function CloseCon()
116 
117     {
118 
119         mysql_close($this->mysql_conn);
120 
121     }
122 
123    
124 
125     //查询方法
126 
127     public function SelectAll()
128 
129     {
130 
131          $result = mysql_query($this->sqlstr,$this->mysql_conn);
132 
133         if($result)
134 
135         {
136 
137         // $result_row = mysqli_fetch_array($result);
138 
139         // mysql_fetch_row() 将返回结果集中的下一行,如果没有更多行则返回 FALSE。
140 
141         // mysql_fetch_array() 将返回结果集中的键值或者数组,如果没有更多行则返回 FALSE。
142 
143             while($result_row= mysql_fetch_array($result))
144 
145             {
146 
147                 $userid=$result_row["userid"];
148 
149                 $username=$result_row["username"];
150 
151                 $userpwd=$result_row["userpwd"];
152 
153                 $useremail=$result_row["useremail"];
154 
155      
156 
157                 echo "<tr>";
158 
159                 echo "<td>用户名id:</td><td>$userid</td>";
160 
161                 echo "<td>用户名:</td><td>$username</td>";
162 
163                 echo "<td>密码:</td><td>$userpwd</td>";
164 
165                 echo "<td>邮箱:</td><td>$useremail</td>";
166 
167                 echo "</tr>";
168 
169                 echo "</br>";
170 
171                
172 
173                 //mysqli_free_result($result);清除内存中的查询集
174 
175             }
176 
177         }
178 
179     }
180 
181    
182 
183     //大数据查询验证两种查询数据集的区别
184 
185     public function Select()
186 
187     {
188 
189         //分别取消 mysql_unbuffered_query和mysql_query查看效果
190 
191       $result = mysql_unbuffered_query($this->sqlstr,  $this->mysql_conn);
192 
193         //$result = mysql_query($this->sqlstr,  $this->mysql_conn);
194 
195        
196 
197          if($result)
198 
199         {
200 
201         // $result_row = mysqli_fetch_array($result);
202 
203         // mysql_fetch_row() 将返回结果集中的下一行,如果没有更多行则返回 FALSE。
204 
205         // mysql_fetch_array() 将返回结果集中的键值或者数组,如果没有更多行则返回 FALSE。
206 
207             while($result_row= mysql_fetch_array($result))
208 
209             {
210 
211                 $userid=$result_row["userid"];
212 
213                 $username=$result_row["username"];
214 
215                 $userpwd=$result_row["userpwd"];
216 
217                 $useremail=$result_row["useremail"];
218 
219      
220 
221                 echo "<tr>";
222 
223                 echo "<td>用户名id:</td><td>$userid</td>";
224 
225                 echo "<td>用户名:</td><td>$username</td>";
226 
227                 echo "<td>密码:</td><td>$userpwd</td>";
228 
229                 echo "<td>邮箱:</td><td>$useremail</td>";
230 
231                 echo "</tr>";
232 
233                 echo "</br>";
234 
235                 echo "处理过程中数据集总行数获取:";
236 
237                 //mysql_unbuffered_query查询的结果集中,mysql_fetch_array处理过程中,不可以使用mysql_num_rows获取结果集行数
238 
239                  echo mysql_num_rows($result);
240 
241                  echo "</br>";
242 
243               
244 
245             }
246 
247             mysql_data_seek($result,1);//把指针指向数据集最开始
248 
249             //mysql_unbuffered_query查询的结果集中,mysql_fetch_array处理过程完成后,可以使用mysql_num_rows获取结果集行数
250 
251             echo "处理完成后,数据集总行数获取:";
252 
253             echo mysql_num_rows($result);
254 
255             echo "</br>";
256 
257            
258 
259            
260 
261             //再次操作mysql_unbuffered_query查询的结果集,数据集为空不输出
262 
263              while($result_row= mysql_fetch_array($result))
264 
265             {
266 
267                 $userid=$result_row["userid"];
268 
269                 $username=$result_row["username"];
270 
271                 $userpwd=$result_row["userpwd"];
272 
273                 $useremail=$result_row["useremail"];
274 
275               
276 
277                 echo "<tr>";
278 
279                 echo "<td>用户名id:</td><td>$userid</td>";
280 
281                 echo "<td>用户名:</td><td>$username</td>";
282 
283                 echo "<td>密码:</td><td>$userpwd</td>";
284 
285                 echo "<td>邮箱:</td><td>$useremail</td>";
286 
287                 echo "</tr>";
288 
289                 echo "</br>";
290 
291                
292 
293                 //mysqli_free_result($result);清除内存中的查询集
294 
295             }
296 
297              echo "再次处理后行数为:";
298 
299               echo mysql_num_rows($result);
300 
301                mysql_free_result($result);
302 
303          
304 
305         }
306    }
307   }

第一次写博客,希望大家多批评指正,另求php操作数据库的优秀框架,我刚从.net转为php很多不懂的,希望能得到更多的信息