2013-01-23 45 views
1

我已經知道PHP一段時間了,但不知道foreach()命令是如何工作的。我知道它和while()類似。我已經查看了它是如何工作的,但我不太確定如何將mySQL語句連接到它。PHP SQL Foreach Statement

比方說你有一個SQL語句如下:

"SELECT username,password,email,dob FROM users"

你將如何落實到一個foreach()語句此呼應的每個用戶的用戶名,密碼,電子郵件地址和出生日期?

感謝您提前提供所有幫助!

+0

檢查示例#3在這裏:http://php.net/manual/en/mysqli-result.fetch-assoc.php –

回答

3

foreach方法循環一個數組(或對象)的所有行,從所述第一,直到最後。這與while循環有所不同,while一直保持循環,直到滿足特定條件。這可以在2次迭代或1000次迭代之後,取決於您設置的條件。

foreach循環中,您將知道迭代次數與數組中的鍵數量相同(除非您在其中使用break語句,這會立即中止)。

SQL結果也可以作爲數組或對象返回,可以循環使用。例如:

$query = "SELECT username,password,email,dob FROM users"; 
$resultSet = mysqli_fetch_all($query, MYSQLI_BOTH); 
foreach ($resultSet as $id => $row) { 
    echo $row['username'] // Show username 
} 
+0

mysqli_fetch_array將返回一行,而不是一行數組。爲mysqli_fetch_all設定一個錯字 – Kickstart

+0

@Kickstart你是對的!謝謝,我更新了答案。 – Oldskool

0

Foreach遍歷數組。你需要把這個查詢的結果放到一個數組中,這需要在while循環中循環,並將行保存到一個數組中或者使用類似於* mysqli_fetch_all *

0

使用MySQL造成它是一個while環路的標準方式。請看例子2瀏覽:

function readDataForwards($dbh) { 
    $sql = 'SELECT hand, won, bet FROM mynumbers ORDER BY BET'; 
    try { 
    $stmt = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL)); 
    $stmt->execute(); 
    while ($row = $stmt->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_NEXT)) { 
     $data = $row[0] . "\t" . $row[1] . "\t" . $row[2] . "\n"; 
     print $data; 
    } 
    $stmt = null; 
    } 
    catch (PDOException $e) { 
    print $e->getMessage(); 
    } 
} 

http://php.net/manual/en/pdostatement.fetch.php

你可以通過用foreach的結果,先取出所有的數據循環:

$sth = $dbh->prepare("SELECT name, colour FROM fruit"); 
$sth->execute(); 

/* Fetch all of the remaining rows in the result set */ 
print("Fetch all of the remaining rows in the result set:\n"); 
$result = $sth->fetchAll(); 
foreach($result as $key => $value) 
{ 
    var_dump($value); 
} 

http://php.net/manual/en/pdostatement.fetchall.php

0

這裏的問題是,你將需要一些迭代來使用foreach - 而且看起來你習慣於獲得單個數組/對象。如果您使用了數據庫抽象層而不是原始的mysql_ *命令,那麼大多數這些工具將會返回一個數組或對象的數組。

你可以看到的是問什麼你在這裏的例子,但要注意這是使用CodeIgniter的數據庫層,以獲得數據:http://ellislab.com/codeigniter/user-guide/database/results.html

0

的foreach是通過遍歷數組的機制。如果你用來運行sql查詢的東西是返回一個數據數組(幾乎可以肯定是),你可以使用foreach循環遍歷所有的結果。

$my_array = array('cats' => 'meow', 'dogs' => 'bark'); 
foreach($my_array as $value) { echo "{$vlaue} <br />"; } 
echo "<br />"; 
foreach($my_array as $key => $value) { echo "{$key} make a {$value} sound<br />"; } 

輸出:

樹皮
貓做喵喵聲
狗做出樹皮聲音

您的SQL查詢

$mysqli = new mysqli("example.com", "user", "password", "database"); 

$users = mysqli_fetch_array($mysqli->query("SELECT username,password,email,dob FROM users") , MYSQLI_BOTH); 

foreach($users as $user) { 
    echo "User: {$user['username']} <br /> 
     Password: {$user['password]} <br /> 
     email: {$user['email']} <br /> 
     DOB: {$user['dob']} <br /><br />"; 
} 

不要使用mysqli,雖然我只是爲了簡單起見而使用它。