2016-12-17 4 views
0

Ich weiß, das ist grundlegende Frage, aber aufgrund des Mangels an Wissen, möchte ich wissen, wie mysqli_result in Array konvertiert und das Ergebnis abgerufen wurde. HierMysqli Ergebnis foreach Resultset konvertiert in Array

ist die Datenbank:

CREATE TABLE IF NOT EXISTS `slider` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `title` varchar(255) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ; 

INSERT INTO `slider` (`id`, `title`) VALUES 
(1, 'Slider 1'), 
(2, 'Slider 2'), 
(3, 'Slider 3'), 
(4, 'Slider 4'), 
(5, 'Slider 5'), 
(6, 'Slider 6'), 
(7, 'Slider 7'), 
(8, 'Slider 8'); 

Hier ist die PHP-Datei:

$mysqli = new mysqli('host', 'user', 'pass', 'db',port); 

if ($mysqli->connect_error) { 
    die('Connect Error (' . $mysqli->connect_errno . ') ' 
      . $mysqli->connect_error); 
} 

$query = "SELECT * FROM slider ORDER BY id"; 
if ($result = $mysqli->query($query)) { 
    echo "<pre>"; print_r($result); //This is mysqli_result Object 

    foreach($result as $row) { //Here is the magic how it is converted and row is retrieved 
     //echo "<pre>"; print_r($row); 
     printf ("<br>%s (%s)\n", $row["id"], $row["title"]); 
    } 

    while ($row = $result->fetch_assoc()) { //Normal way 
     //echo "<pre>"; print_r($row); 
     printf ("<br>%s (%s)\n", $row["id"], $row["title"]); 
    } 

    $result->free(); 
} 

Wenn wir während überqueren durch, wir haben Ergebnis mit fetch_ * Methoden abzurufen, aber wenn ich durchqueren durch foreach, wie wird das Ergebnis abgerufen? Wie implizit ruft foreach loop fetch_ * auf?

+0

Es ist eine Klasse, die die 'Traversable'-Schnittstelle implementiert, so dass' foreach() 'automatisch abruft. – Barmar

+0

Interessant zu wissen, werde ich durchgehen. – Kamal

Antwort

0

Diese Frage ist eigentlich nicht so grundlegend, da dieses Verhalten ziemlich neu ist und tatsächlich einige Magie verwendet.

Als Sie auf der manual page lesen können, unterstützt MySQLi_Result Objekt Traversable interface, so kann es über iteriert werden. Und wenn es iteriert wird, ruft es fetch() intern auf.

So ist es nicht konvertiert, sondern getarnt als Array.

+0

Danke für deine Antwort, ich werde es überprüfen .. – Kamal

0

Dies ist die PHP-Klasse, die ich verwende RTmysqli.

Verbrauch:

$RTmysqli= new RTlib\RTphp\RTmysqli(); 
$RTmysqli->config(DB_HOST, DB_UNAME, DB_PWORD, DB_NAME); 

$result = $RTmysqli->query("SELECT * FROM slider ORDER BY id"); 

if (!empty($result)) { 
    foreach($result as $row) { 
     print "<br>" . $row["id"] . "(" . $row["title"] . ")\n"; 
    } 
} 

Hoffe, es hilft. :)