2015-12-27 24 views
3
$sql="SELECT userId FROM eventmember WHERE eventid='$event_id';";` 
    $resultset = mysql_query($sql); 
    $row = mysql_fetch_array($resultset); 

我從喜歡eventid==> eid-01(us-0, us-3,...)特定事件列特定的用戶ID,如何顯示所有數據陸續從mysql_fetch_array()在PHP

$num_row = mysql_num_rows($resultset); 
    while($row) {   
     for($i = 0; $i<$num_row; $i++) {   
     $sql = "SELECT userId, firstName FROM userinfo WHERE userId='$row[$i]';"; 
     $resultset = mysql_query($sql); 
     $row22 = mysql_fetch_array($resultset); 
     $us_id = $row22['userId']; 
     $us_name = $row22['firstName']; 

     echo "<tr>"; 
     echo "<td>ID:</td> <td class='text2' align='center' colspan='2'> 
     <b> $us_id </b> 
     </u></td>"; 
     echo "</tr>"; 
     break; 
     } 
     $row = mysql_fetch_array($resultset); 
    } 

該代碼我只拿到一個用戶ID信息,但有更多用戶針對一個事件。

+2

把它放進一個while循環:'而($行= mysql_fetch_array($結果集)){/ *代碼* /}' – Rizier123

+2

[**請不要在新的使用'mysql_ *'功能代碼**](http://stackoverflow.com/q/12859942)。他們不再被維護[並被正式棄用](https://wiki.php.net/rfc/mysql_deprecation)。看到[**紅框**](http://uk.php.net/manual/en/function.mysql-connect.php)?學習[*準備的語句*](http://en.wikipedia.org/wiki/Prepared_statement),並使用[PDO](http://php.net/pdo)或[MySQLi](http:// php.net/mysqli)。 – Rizier123

+0

一個foreach循環也應該工作'foreach($ row as $ value){}' – danidee

回答

1

簡單的解決方案

你需要從eventmember表,該表必須對每一個事件的多個用戶得到多個userId秒。但是你只從$row = mysql_fetch_array($resultset);那個查詢中獲取一次,所以你應該只有一個用戶,你現在得到了什麼。因此,問題是,您實際上已將while循環放置在錯誤的地方。環路應設置如下:

$sql="SELECT userId FROM eventmember WHERE eventid='$event_id';"; 
$resultset = mysql_query($sql); 
$num_row = mysql_num_rows($resultset); 
if($num_row) { 
    while($row = mysql_fetch_array($resultset)) {    
     $sql22 = "SELECT userId, firstName FROM userinfo WHERE userId='{$row['userId']}';"; 
     $resultset22 = mysql_query($sql22); 
     $row22 = mysql_fetch_array($resultset22); 
     $us_id = $row22['userId']; 
     $us_name = $row22['firstName']; 

     echo "<tr>"; 
     echo "<td>ID:</td> <td class='text2' align='center' colspan='2'> 
     <b> $us_id </b> 
     </u></td>"; 
     echo "</tr>"; 
     //You shouldn't use a break here. This will again give you single result only. 
    } 
} 

更好的解決方案

而不是使用多個查詢從userinfo表中獲取數據,使用JOIN一個查詢來獲取所有數據。就像這樣:

$sql="SELECT u.userId,u.firstName FROM eventmember e JOIN userinfo u ON u.userId = e.userId WHERE e.eventid='$event_id';"; 
$resultset = mysql_query($sql); 
$num_row = mysql_num_rows($resultset); 
if($num_row) { 
    while($row = mysql_fetch_array($resultset)) {    

     $us_id = $row['userId']; 
     $us_name = $row['firstName']; 

     echo "<tr>"; 
     echo "<td>ID:</td> <td class='text2' align='center' colspan='2'> 
     <b> $us_id </b> 
     </u></td>"; 
     echo "</tr>"; 
    } 
} 

最好的,最安全的解決方案

正如你應該已經知道mysql_*函數在PHP 7被刪除,這個功能是爲了您的安全非常有害的。所以,你應該移動到PDOmysqli_*函數。我在這裏給出了一個mysqli_*函數的例子,另外我一次性讀取所有行,而不是對每行進行讀取,這對性能更好。

//First setup your connection by this way. 
$link = mysqli_connect(localhost, "my_user", "my_password", "my_db"); 
//Now you can use mysqli 
$sql="SELECT u.userId,u.firstName FROM eventmember e JOIN userinfo u ON u.userId = e.userId WHERE e.eventid=?;"; 
$stmt = mysqli_prepare($link, $sql); 
$stmt->bind_param('s', $event_id); 
$stmt->execute(); 
$resultset = $stmt->get_result(); 
$resultArray = $resultset->fetch_all(); 
$num_row = count($resultArray); 
if($num_row) { 
    foreach($resultArray as $row) {    

     $us_id = $row['userId']; 
     $us_name = $row['firstName']; 

     echo "<tr>"; 
     echo "<td>ID:</td> <td class='text2' align='center' colspan='2'> 
     <b> $us_id </b> 
     </u></td>"; 
     echo "</tr>"; 
    } 
} 
+0

謝謝你的回答@Tareq Mahmood,但我不明白,在哪裏劑量的'$行[$我]'$我變量你使用..請給我一個解決方案.. –

+0

@HamzaRahman,對不起,我錯過了在那裏更新你的代碼。你可以在這裏使用'{$ row ['userId']}'或'$ row [0]',我更喜歡第一個,因爲它可以消除你所得到的內容和方式的混亂。我更新了我的答案。 –

+0

'{...}'在這裏使用,以便該部分內的單引號不會對我們的外部單引號產生任何問題。 –

3

首先,使用if語句來檢查返回的結果集是否包含任何行或不行,像這樣:

if($num_row){ 
    // your code 
} 

其次,使用while循環來遍歷結果集,並顯示它的內容,像這樣:

while($row22 = mysql_fetch_array($resultset)){ 
    // your code 
} 

最後,請不要使用mysql_數據庫擴展,他們在PHP 5.5.0已過時,在PHP 7.0.0被拆除。改爲使用mysqliPDO擴展名。這是why you shouldn't use mysql_ functions

所以,你的代碼應該是這樣的:

<?php 
    $sql="SELECT userId FROM eventmember WHERE eventid='$event_id'"; 
    $resultset = mysql_query($sql); 
    $row = mysql_fetch_array($resultset); 

    $num_row = mysql_num_rows($resultset); 

    if($num_row){      
     $sql = "SELECT userId, firstName FROM userinfo WHERE userId='" . $row['userId'] . "'"; 
     $resultset = mysql_query($sql); 
     ?> 
     <table> 
     <tr> 
      <td>User ID</td> 
      <td>First Name</td> 
     </tr> 
     <?php 
     while($row22 = mysql_fetch_array($resultset)){ 
      echo "<tr><td>{$row22['userId']}</td><td>{$row22['firstName']}</td></tr>"; 
     } 
     ?> 
     </table> 
     <?php 
    } 
?> 

爲了更好的可讀性,我已經顯示在表格單元格中的數據。

+0

OP試圖從'eventmember'表中獲取多行,然後基於這些行獲取每行的用戶信息。我不認爲你的代碼是這樣做的! –

+0

@TareqMahmood OP已經指定了這一行,**我從特定事件列中得到了特定用戶ID ...... **。 –

+0

每個事件應該有多個用戶標識 –

0

mysql_fetch_array()將從結果集中檢索單個結果。因此,您需要將其包裝在一個循環中以獲取每一行/結果。

這是我從PHP文件直接撕開一個例子:

while ($row = mysql_fetch_array($result)) { 
    printf("ID: %s Name: %s", $row["id"], $row["name"]); 
} 

在你的情況,你會包裝的HTML代碼中while循環。

另外一個改進是確保$resultset是一種資源;如果您的查詢無效,則mysql_query()可返回false(並且在INSERTS等其他成功案例中爲true)。您還可以使用mysql_num_rows()來確定是否有>0行要顯示(並自定義顯示'沒有行返回'消息)。

也許更重要的是mysql_*函數在PHP 5.5.0中被棄用,並且在PHP 7.0.0中被刪除。相反,MySQLiPDO_MySQL

通過繼續編寫mysql_的代碼,你會使自己的升級變得更加困難。還值得注意的是,5.5還將在6個月內達到安全EOL,讓您依靠您的操作系統供應商從那時起支持安全更新。