2016-08-02 15 views
0

Umwandlung habe ich ein Skript Daten aus zwei Tabellen zu extrahieren matieres und sous_matieres aber es ist geschrieben für PDO, ich brauche es für MySQLi arbeiten:Ergebnisse nicht angezeigt, nachdem PDO Abfrage MySQLi

$stmt = $pdo->query('SELECT 
         m.id AS m_id, m.url AS m_url, m.title AS m_title, 
         s.id AS s_id, s.url AS s_url, s.title AS s_title 
        FROM matieres m 
        INNER JOIN sous_matieres s ON m.url = s.parent'); 

while ($row = $stmt->fetchObject()) { 
    $matieres[$row->m_id]['url'] = $row->m_url; 
    $matieres[$row->m_id]['title'] = $row->m_title; 
    $matieres[$row->m_id]['sous_matieres'][$row->s_id] = $row; 
} 

foreach ($matieres as $m_id => $matiere) { 
    echo "<h2>$matiere[title]</h2>"; 
    foreach ($matiere['sous_matieres'] as $id => $sm) { 
     echo "<div> 
        <a href='{$sm->s_url}'>{$sm->s_title}</a> 
       </div>"; 
    } 
} 

Mein neuer mySQLi Code, der nichts trotz der beiden Tabellen Daten zeigt:

$query = 'SELECT 
       m.id AS m_id, m.url AS m_url, m.title AS m_title, 
       s.id AS s_id, s.url AS s_url, s.title AS s_title 
      FROM matieres m 
      INNER JOIN sous_matieres s ON m.url = s.parent'; 
$stmt = $mysqli->query($query); 
$stmt->execute(); 
$stmt->store_result(); 

while ($row = $stmt->fetch()) { 
    $matieres[$row->m_id]['url'] = $row->m_url; 
    $matieres[$row->m_id]['title'] = $row->m_title; 
    $matieres[$row->m_id]['sous_matieres'][$row->s_id] = $row; 
} 

foreach ($matieres as $m_id => $matiere) { 
    echo "<h2>$matiere[title]</h2>"; 
    foreach ($matiere['sous_matieres'] as $id => $sm) { 
     echo "<div> 
        <a href='{$sm->s_url}'>{$sm->s_title}</a> 
       </div>"; 
    } 
} 

I don Ich weiß nicht, ob es $stmt->bind_result() und die Variable im Inneren fehlt. Wie bei normalen mySQLi-Abfragen (ohne Joins) muss ich die ausgewählten Spaltennamen als Variable innerhalb des $stmt->bind_result()

+0

Ich denke, $ mysqli-> query() 'gibt bereits die ausgeführte Anweisung zurück (außer seltsamer Wrapper). Aufruf von '-> execute()' kann Dinge tun, die Sie nicht beabsichtigen ... als ... wenn Sie ... ausführen, fangen Sie den Rückgabewert tatsächlich zu Debugging-Zwecken ab. (Wie auch immer, ich bin unsicher, warum Sie zu mysqli wechseln würden) – Jakumi

Antwort

1

mysqli_stmt::fetch deklarieren, wenn Sie Variablen an Ergebnisse einer vorbereiteten Anweisung binden, um diese Variablen aufzufüllen. Die alternative Methode, die Ergebnisse zu bekommen ist die mysqli_result Klasse zu verwenden, mit dem Sie die Art und Weise verwenden können Sie versuchen zu:

$result = $mysqli->query($query); 

while ($row = $result->fetch_object()) { 
    $matieres[$row->m_id]['url'] = $row->m_url; 
    $matieres[$row->m_id]['title'] = $row->m_title; 
    $matieres[$row->m_id]['sous_matieres'][$row->s_id] = $row; 
} 

http://php.net/manual/en/mysqli.query.php und http://php.net/manual/en/class.mysqli-result.php See.

+0

Sorry, aber ist $ result-> fetchObject() eine gültige mySQLi-Funktion? Ich dachte, es ist nur PDO und es ist das Äquivalent von $ result-> fetch() für mySQLi – medk

+0

Für solche Fragen ist es am besten, auf das Handbuch zu verweisen, das sie klar und direkt beantworten kann. Ich habe oben auf die entsprechende Seite für Sie verlinkt. – deceze

+0

Bei der Anzeige von Fehlern: Schwerwiegender Fehler: Aufruf an undefinierte Methode mysqli_stmt :: fetchObject() – medk