2016-01-23 59 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>"; 
} 
相关问题