2016-08-04 10 views
1

Ich versuche, alle Felder für jede Tabelle anzuzeigen und sie einem Array mit mehreren Ebenen zuzuweisen, aber ich bekomme 'Call to a Member-Funktion fetch_assoc() auf einem Nicht-Objekt' ...ZEIGEN COLUMNS FROM in foreach Schleife

$sql_tables = "SHOW TABLES;"; 
$result = $mysql->query($sql_tables); 
if ($result->num_rows > 0) { 
    while($row_tables = $result->fetch_assoc()) { 
      $alltables_array[] = $row_tables["Tables_in_dbname"]; 
    } 
} 

foreach ($alltables_array as $table) { 
    $sql_fields = "SHOW COLUMNS FROM " . $table . ";"; 
    $result_fields= $mysql->query($sql_fields); 
    while($row_fields = $result_fields->fetch_assoc()) { /* ERROR ON THIS LINE */ 
      $allfields_array[$table ][] = $row_fields['Field']; 
    } 
}  

Vielen Dank!

Antwort

2

Da $row_tables ergeben Ihrer aktuellen Datenbankname:

$row_tables["Tables_in_dbname"]; // this is incorrect (unless your current dbname is really dbname) 
      //^undefined index 

So fügen Sie einfach einen dynamischen Index:

$dbname = 'test'; 
if ($result->num_rows > 0) { 
    while($row_tables = $result->fetch_assoc()) { 
      $alltables_array[] = $row_tables['Tables_in_' . $dbname]; 
    } 
} 

ich ->fetch_row() statt Verwendung würde vorschlagen:

if ($result->num_rows > 0) { 
    while($row_tables = $result->fetch_row()) { 
      $alltables_array[] = $row_tables[0]; 
    } 
} 

Dann Punkt um Null zu indexieren. Sie müssen keine dynamische Variable im assoziativen Index hinzufügen.

Nebenbei bemerkt: Kann eine Band-Aid-Lösung:

$alltables_array[] = $row_tables[key($row_tables)]; // not good though, it'll invoke key() every iteration. 
+0

Bemerkung am Rande: die ';' Semikolon in nicht benötigte in den Abfrageanweisungen – Ghost

+0

Vielen Dank für Ihre Antwort. Entschuldigung, ich war wahrscheinlich nicht sehr präzise, ​​ich bekomme den Fehler an der 'while ($ row_fields = $ result_fields ... line'. Ich werde die Frage bearbeiten. ... Ich versuche eine Suche überall im Datenbankfunktion ... – codeispoetry

+0

@codeispoetry ja ich habe den Code-Fehler getestet, der Fehler ist angekettet, der Ursprung ist das falsche Holen der Tabellen, holen Sie die richtigen Tabellen, die Spalten werden korrekt in – Ghost