2013-10-27 58 views
0

我最近一直在使用PHP,但不太了解。PHP选择特定行

现在我试图从一行中获取所有信息。这是我到目前为止:

$server = mysql_query("SELECT * FROM servers;"); 
$serverFinal = mysql_fetch_row($server); 

这是行得通的,但只要我有超过1行的表,它只是不断给我第一行。 这是全码:

<?php 
include "C:/wamp/www/minebook/mysql/info.php"; 
$db_database = 'minebook_servers'; 
mysql_connect($db_host, $db_user, $db_pass); 
mysql_select_db($db_database); 

    $result = mysql_fetch_array(mysql_query("SELECT COUNT(*) as count FROM servers")); 
    $f = 1; 
    while ($f <= $result['count']) { 

    $server = mysql_query("SELECT * FROM servers;"); 
    $serverFinal = mysql_fetch_row($server); 

    $response = $status->getStatus("$serverFinal[1]", $serverFinal[2]); 

     if(!$response) { 
    echo ' 
      <tbody> 
        <tr> 
     <td class="mname">'.$serverFinal[0].'</td> 
     <td class="mserver">OFFLINE</td> 
     <td class="mstatus">OFFLINE</td> 
        </tr> 
      </tbody> 
     '; 
    } else { 
    echo ' 
     <tbody> 
        <tr> 
     <td class="mname"> 
     '.$serverFinal[0].' '.$serverFinal[1].' '.$serverFinal[2].' 
     </td> 
     <td class="mserver"> 
     <img class="theadImage" border="0" src="/minebook/pictures/d_helmet.png"   alt="Name" width="22" height="18"> 
     '.$response['players'].'/'.$response['maxplayers'].' 
     <img class="theadImage" border="0" src="/minebook/pictures/grass.png" alt="Name" width="18" height="18"> 
     '.$response['version'].' 
     </td> 
     <td class="mstatus"> 
     ONLINE 
     </td> 
        </tr> 
     </tbody> 
'; 
       } 
    $f++; 
    } 
     ?> 

而且我知道我应该使用的mysqli。我正在尽快切换。

+0

尝试使用“mysql_fetch_assoc”而不是“mysql_fetch_row” –

+1

请使用'MySQLi_'而不是'MySQL_',或者更好地使用PDO。 'MySQL_'这个扩展在PHP 5.5.0以前不推荐使用,并且将来会被删除。 –

+0

mysql_fetch_assoc使$ serverFinal [0]不可用并引发错误。而且我也知道MySQLi的事情,我很快就会把它切换。 – HeyAwesomePeople

回答

0

我猜你对数据库操作有点困惑。遵循以下步骤:

  1. 查询数据库并获取所有结果。通过你的结果(请不要在一个循环内查询)

    $server = mysql_query("SELECT * FROM servers");

  2. 现在环和获取它们。

    while($row = mysql_fetch_assoc($server)){ //the $row will contain all the data related to this row }

所以,你需要做这样的事情:

$server = mysql_query("SELECT * FROM servers"); //query outside the loop 
while($row = mysql_fetch_assoc($server)){ //fetch in a loop 
    //the $row will contain all the data related to this row 
    $response = $status->getStatus("$row['field_name']", $row['field_name']); 
    if(!$response) { 
    //continue your work 
    } 
} 

一点题外话,MySQL_*扩展已被弃用,不再维持。使用PDOMySQLi_* insetad。

0

看起来你并没有在你的内部SQL语句中循环。

while (($serverFinal = mysql_fetch_row($server)) !== FALSE) { 
    // do everything here 
} 
+0

我不明白为什么我需要使用它。所有这一切都是说如果mysql_fetch_row($ server)不是false,则继续声明。 – HeyAwesomePeople

+0

每次在外循环中进行一次迭代时,都会执行重置结果指针的内部查询。这就是它总是只显示第一个结果的原因。相反,您应该只执行一次查询**,并循环它直到达到结果集的末尾。 – regulus