ホームページ >バックエンド開発 >PHPチュートリアル >初心者の方、なぜ次のプログラムがループで出力されず、中国語の出力が依然として文字化けするのか教えてください。
<?$db_host = 'localhost';$db_user = 'root';$db_password = 'root3306';$db_database = 'chuyu';$con = mysql_connect($db_host, $db_user, $db_password);mysql_query("set names 'gb2312'"); if(!$con){die('数据库连接失败: ' . mysql_error());}mysql_select_db($db_database);global $site;$site_data=mysql_query("select * from dh_member_control where id=1",$con);$site=mysql_fetch_array($site_data);$hot_vip_data=mysql_query("SELECT * FROM dh_member WHERE `mck`=1 AND `photo`<>'/images/nan.png' AND `photo`<>'/images/nv.png' ORDER BY `mpower` DESC,`cktime` DESC LIMIT 1,12",$con);$hot_vip=mysql_fetch_array($hot_vip_data);$i=1;while ($hot_vip && $i<=12){if ($i % 6 == 0){$last=" class=\"last\"";}else{$last="";}$i++;?><li <? echo $last;?> onclick="javascript:location.href='/display/?<? echo $hot_vip["id"]?>.html'"><div class="vpc"><img src="<? echo $hot_vip["photo"]?>" /></div><div class="vpn"><? if (strlen($hot_vip["unick"])>4){echo substr($hot_vip["unick"],1,4);}else{echo $hot_vip["unick"];}if ($hot_vip["mpower"]===2){ echo "<a href=\"/vip/\" title=\"初遇会员\"><img src=\"/images/v.png\" /></a>";} ?></div><div class="vpt"><? $timediff = strtotime (date("y-m-d")) - strtotime($hot_vip["sri"]) ;echo intval($timediff/(86400*365)) . "岁";echo $hot_vip["add"];?></div></li><? }?>
$ifddf3469e19ed3233c8a5436b8dc59e2 には追加されていません
解決策は次のとおりです:
<?echo '<meta http-equiv="content-type" content="text/html;charset=utf-8">';$db_host = 'localhost';$db_user = 'root';$db_password = 'root3306';$db_database = 'chuyu';$con = mysql_connect($db_host, $db_user, $db_password);mysql_query("set names 'gb2312'"); if(!$con){die('数据库连接失败: ' . mysql_error());}mysql_select_db($db_database);global $site;$site_data=mysql_query("select * from dh_member_control where id=1",$con);$site=mysql_fetch_array($site_data); $hot_vip_data=mysql_query("SELECT * FROM dh_member WHERE `mck`=1 AND `photo`<>'/images/nan.png' AND `photo`<>'/images/nv.png' ORDER BY `mpower` DESC,`cktime` DESC LIMIT 1,12",$con);#$hot_vip=mysql_fetch_array($hot_vip_data);$i=1;while ($hot_vip=mysql_fetch_array($hot_vip_data) && $i<=12){if ($i % 6 == 0){$last=" class=\"last\"";}else{$last="";}$i++;?><li <? echo $last;?> onclick="javascript:location.href='/display/?<? echo $hot_vip["id"]?>.html'"><div class="vpc"><img src="<? echo $hot_vip["photo"]?>" /></div><div class="vpn"><? if (strlen($hot_vip["unick"])>4){echo substr($hot_vip["unick"],1,4);}else{echo $hot_vip["unick"];}if ($hot_vip["mpower"]===2){ echo "<a href=\"/vip/\" title=\"初遇会员\"><img src=\"/images/v.png\" /></a>";} ?></div><div class="vpt"><? $timediff = strtotime (date("y-m-d")) - strtotime($hot_vip["sri"]) ;echo intval($timediff/(86400*365)) . "岁";echo $hot_vip["add"];?></div></li><? }?>
お二人ともありがとうございます
問題は解決しましたが、少し疑問が残ります:
$hot_vip_data = mysql_query( "SELECT * FROM dh_member WHERE `mck`=1 AND `photo`a8093152e673feb7aba1828c43532094'/images/nan.png' AND `photo`a8093152e673feb7aba1828c43532094'/images/nv.png' ORDER BY `mpower` DESC,`cktime ` DESC LIMIT 1,12",$con);
$hot_vip = mysql_fetch_array($hot_vip_data);
while ($hot_vip ){...}
and
$hot_vip_data = mysql_query( "SELECT * FROM dh_member W HERE ` mck`=1 AND `photo`a8093152e673feb7aba1828c43532094'/images/nan.png' AND `photo`a8093152e673feb7aba1828c43532094'/images/nv.png' ORDER BY `mpower` DESC ,`cktime` DESC LIMIT 1, 12",$con);
while ($hot_vip = mysql_fetch_array($hot_vip_data)){...}
それらは同じですか?
それは違います!
while ($hot_vip){...} // $hot_vip が空でない場合、無限ループになります
while ($hot_vip = mysql_fetch_array( $hot_vip_data)){...} //$hot_vip が空になるまで各レコードをループして読み取ります (読み取りが完了します)
$hot_vip = mysql_fetch_array($hot_vip_data); // レコードを取得します
while ($hot_vip){...} // $hot_vip が空でない場合、無限ループになります
while ($hot_vip = mysql_fetch_array( $hot_vip_data)){...} //$hot_vip が空になるまで各レコードをループして読み取ります (読み取りが完了します)