php
  • mysql
  • while-loop
  • 2012-12-24 24 views 0 likes 
    0

    我卡上的小東西,希望你能幫助我..從MySQL獲得行的所有數據在一個變量

    我需要所有的電話號碼一個(在表「leerlingen」那是一列)在這裏,用逗號分隔開,這樣我就可以插入在這裏另一個腳本,它顯示了所有的電話號碼,就像這樣:

    0612345637,061231823,061231723 
    

    代碼:

    $result = mysql_query("SELECT * FROM leerlingen 
    WHERE klas_id='$aan_klas'"); 
    
    while($row = mysql_fetch_array($result)) 
        { 
    
        $variabele = $row['leerling_nummer'] . ","; 
    
        echo "$variabele"; 
        } 
    

    但是,當我echo $variabeleOUTSIDE while循環,它只給我一個電話號碼。 When I echo $variabeleINSIDE while循環,它顯示我所有的電話號碼,在正確的方式..任何想法?

    編輯

    我的代碼是不是在我所看到的工作,所以這裏就是我想要的:它應該得到一個逗號分隔的所有的電話號碼,放在一個variabele或陣列。

    編輯

    謝謝你們,這是workign!但是......只有當al mysql_的東西是mysql_。當我改變他們mysqli_,什麼也沒有發生......

    +0

    不要使用mysql_ *語句,它們已經過時。更喜歡使用mysqli_ *或PDO。 –

    +0

    mysql_ *已棄用din更多版本的php需要使用pdo對象或mysqli_ *爲 –

    +0

    每次,$ variabele將只有最新的電話號碼。因爲它會被覆蓋。簡單地採取一個數組,然後用逗號內爆。 –

    回答

    1

    爲什麼你看到所有電話號碼的原因,當你echo "$variabele"; while循環,是因爲在每次迭代(每次while循環重新輸入的時間,可以這麼說)你是呼應了最後值爲$variabele。所以,它看起來好像一切都是echo'd一次,其實它是一次echo'd一次。

    您可以輕鬆地通過改變代碼來證明這一點:

    while($row = mysql_fetch_array($result)) 
    { 
        $variabele = $row['leerling_nummer'] . ","; 
        echo "$variabele" . " | "; 
    } 
    

    現在,你會看到的結果是不是(因爲我認爲你的預期):

    0612345637,061231823,061231723, |

    .. 。但是:

    0612345637, | 061231823, | 061231723, |

    如果您認爲正在發生什麼,是真的發生,那麼結果實際上是這樣的:

    0612345637, | 0612345637, 061231823, | 0612345637, 061231823, 061231723, |

    如果你想收集所有電話號碼一個變量,你確實最好通過使用數組,如Mark Baker already proposed,你必須將每個新的電話號碼附加到$variabele字符串,就像這樣:

    // initiate $variabele as an empty string 
    $variabele = ""; 
    while($row = mysql_fetch_array($result)) 
    { 
        // append the new phone number to $variabele (note .= in stead of =) 
        $variabele .= $row['leerling_nummer'] . ","; 
    } 
    echo $variabele; 
    

    唯一的問題是,你必須刪除最後一個逗號。有很多種方法可以解決這個問題,但Mark Ba​​ker的解決方案實際上要簡單得多。

    最後,我想讓你知道一個漂亮的MySQL函數,它允許你輕鬆地連接列的值;這是功能GROUP_CONCAT()。但是,這在您當前的情況下可能沒有用處,因爲您也正在獲取其他列。但是,以供將來參考,如果你只需要一列想用逗號將它們串聯,你可以這樣做:

    SELECT GROUP_CONCAT(leerling_nummer) AS leerling_nummers 
    FROM leerlingen 
    WHERE klas_id='$aan_klas' 
    GROUP BY klas_id 
    

    查詢數據庫,然後做$row = mysql_fetch_array($result);則所有的數字將是$row['leerling_nummers']後,用逗號分隔,因爲GROUP_CONCAT()使用逗號作爲默認分隔符。換句話說:您不需要循環使用PHP的行; MySQL已經爲你收集了一行。

    3

    這正是數組是專爲

    $variabele = array(); 
    while($row = mysql_fetch_array($result)) 
        { 
        if($row['leerling_nummer'] != '') 
         $variabele[] = $row['leerling_nummer']; 
        } 
        echo implode(', ', $variabele); 
    
    +0

    感謝您的答案,但是當我回應這個它說'數組'.. – Jellevdschoot

    +0

    當你回聲__what__它說數組?你只是在沒有內爆的情況下回應$ variabele? –

    +0

    @Jellevdschoot implode將返回一個字符串。將該字符串存儲在某個變量中,然後進行回顯。像$ str = implode(',',$ variabele);然後echo $ str –

    1

    使用串聯:

    $result = mysql_query("SELECT * FROM leerlingen WHERE klas_id='$aan_klas'"); 
    
    $variabele=""; 
    while($row = mysql_fetch_array($result)) 
        { 
    
        $variabele .= $row['leerling_nummer'] . ","; 
        } 
    echo "VAR: $variabele"; 
    

    除此之外,請考慮使用msqli_或PDO因爲mysql_函數已被棄用!

    +0

    最後一行不需要雙引號。 – Sithu

    +0

    是這是真的,通常你會想在變量旁添加一些東西,我忘了刪除它們! – Naryl

    +0

    請注意,此解決方案將有一個尾隨逗號。另外,mysql_函數還沒有被棄用,但是將來自PHP版本「5.5.0」(它仍處於alpha階段)。確實使用PDO或MySQLi仍然非常明智。 –

    0

    根據意見,它似乎不適用於mysqli。 這裏是一個mysqli溶液:

    <?php 
    $result = mysqli_query($link, "SELECT * FROM leerlingen WHERE klas_id='$aan_klas'");  
    $variabele = ""; 
    while($row = mysqli_fetch_array($result)) 
    { 
        if($row['leerling_nummer']){ 
         $variabele .= $row['leerling_nummer'] . ","; 
        } 
    } 
    echo rtrim($variabele, ','); 
    ?> 
    

    mysqli_query()預期的第一個參數是一個鏈路資源從mysqli_connect()返回。

    <?php 
        $mysqlserver = "localhost"; 
        $mysqlusername = "root"; 
        $mysqlpassword = ""; 
        $link = mysqli_connect(localhost, $mysqlusername, $mysqlpassword) or die ("Error connecting to mysql server: ".mysqli_error()); 
    ?> 
    
    相關問題