2016-01-23 76 views
0

我有一個連接到數據庫,我使用mysqli_fetch_assoc來創建一個聯合數組來返回數據到屏幕。的代碼部分看起來是這樣的:mysqli_fetch_assoc返回爲foreach提供的無效參數()

$sql = "SELECT * FROM Kundregistert ORDER BY ID DESC;"; 
    // 
    // 
    $result = mysqli_query($conn, $sql) or die(mysqli_error($conn)); 

    $row = mysqli_fetch_assoc($result); 
    // 
    // Avsluta anslutning till db 
    return ($row['Namn'], $row['Telefonnummer'], $row['Epost'], $row['Dacktyp'], $row['Lagerstatus'], $row['Datum']); 
    mysqli_close($conn); 
} 

一開始我還下稱爲一列存儲在數據庫中的所有信息「昆德」 (我只用return $row['Kund']則因爲它是唯一的1列),則它沒有提供foreach錯誤。現在我通過7個變量存儲信息,並希望返回所有列,就像我上面要做的那樣。

這裏是foreach的代碼;

foreach($company->getCustomerList() as $key => $obj){ 
    echo "<h3 id='id'>$key</h3> " . $obj->getcustomername() . ", " . $obj->getcustomertfn() . ", " . $obj->getcustomerepost() . "<br>" . $obj->gettirebrand() . ", " . $obj->getstatus() . ": " . $obj->getdate() . "<br>" . 
    " <a href='classes_serialisering.php?delPart=$key' id='radera'>Radera post $key </a>" . " <a href='classes_serialisering.php?updateView=$key' id='uppdatera'>Uppdatera Post </a><br>"; 
} 

起初,當我只有一個專欄中,我試着只是改變return $row['']比「昆德」別的東西,然後我也得到了foreach錯誤。所以我覺得有什麼問題,我試圖返回列,但我似乎無法使它的工作。

我是一名PHP初學者,請牢記這一點。

謝謝。

編輯*****

interface RegisterCustomer { 
function addCustomer($customername, $customertfn, $customerepost, $tirebrand, $status); 
function getCustomerList(); 
} 

class Company implements RegisterCustomer { 
protected $companyname = ''; 
public $CustomerList = array(); 

function read_data(){ 
    // 
    //Anslut mot databas 
    $conn = mysqli_connect('xxxxx', 'xxxxx', 'xxxxx') 
    or die('Could not establish connection to MySQL.'); 
    $db_connected = mysqli_select_db($conn, "xxxxxxx"); 

    // 
    // 
    $sql = "SELECT * FROM Kundregistert ORDER BY ID DESC;"; 
    // 
    // 
    $result = mysqli_query($conn, $sql) or die(mysqli_error($conn)); 

    $row = mysqli_fetch_assoc($result); 
    // 
    // Avsluta anslutning till db 
    return $row['Namn']; 
    mysqli_close($conn); 
} 

function __construct($companyname){ 
    $this->foretag = $companyname; 
    $this->CustomerList = unserialize($this->read_data()); 
} 

我覺得即時通訊代碼

+1

只能從函數返回一個值,但該值也能像$行的一個數組,甚至結果集 –

+1

和關閉返回後的連接是沒有意義的,它永遠不會被執行,因爲返回終止執行函數 –

回答

0

首先失去了,你的php方法getCustomerList應修改如下圖所示;

public function getCustomerList() 
{ 
    $sql = "SELECT * FROM Kundregistert ORDER BY ID DESC;"; 
    // 
    // 
    $result = mysqli_query($conn, $sql) or die(mysqli_error($conn)); 

    $allRows = array(); 
    while($row = mysqli_fetch_assoc($result)) 
    { 
     $allRows[] = $row; 
    } 
    // 
    // Avsluta anslutning till db 
    // Return statement should be like below after mysqli_close 
    //return ($row['Namn'], $row['Telefonnummer'], $row['Epost'], $row['Dacktyp'], $row['Lagerstatus'], $row['Datum']); 
    mysqli_close($conn); 

    return $allRows; 
} 

正如您在上面看到的那樣,mysqli查詢結果應該迭代並收集到您的狀態數組中。

謝謝你可以輕鬆地在你的結果如下;

foreach($company->getCustomerList() as $key => $obj){ 
    echo "<h3 id='id'>$key</h3> " . $obj->getcustomername() . ", " . $obj->getcustomertfn() . ", " . $obj->getcustomerepost() . "<br>" . $obj->gettirebrand() . ", " . $obj->getstatus() . ": " . $obj->getdate() . "<br>"." Radera post $key " . " Uppdatera Post";} 

請注意,$ key將始終是當前數組迭代的索引。並且還要介意$ obj不會是一個類,如getcustomerepost()等成員。對於這種使用,您應該將您的方法的對象與您的數據一起返回。

+0

檢查我的編輯完整的代碼,實際上讀取數據的代碼被稱爲read_data,我應該修改那麼? –

0

可能是你可以試試這個代碼

$row = mysqli_fetch_assoc($result); 
while($row = mysqli_fetch_assoc($result)) { 
     // Add data from database to variable $array 
     $array[]['Namn'] = $row['Namn']; 
     $array[]['Telefonnummer'] = $row['Telefonnummer']; 
     $array[]['Epost'] = $row['Epost']; 
     $array[]['Dacktyp'] = $row['Dacktyp']; 
     $array[]['Lagerstatus'] = $row['Lagerstatus']; 
     $array[]['Datum'] = $row['Datum']; 
} 

// Load with this code 
for($i=0; $i<count($array); $i++) { 
    echo $array[$i]['Namn']."<br>"; 
    echo $array[$i]['Telefonnummer']."<br>"; 
    echo $array[$i]['Epost']."<br>"; 
    echo $array[$i]['Dacktyp']."<br>"; 
    echo $array[$i]['Lagerstatus']."<br>"; 
    echo $array[$i]['Datum']."<br>"; 
}