2016-04-01 2 views
2

Echo Ich habe Probleme mit PHP, wo ich ein Array mit Ergebnissen aus einer MySQL-Abfrage bevölkern.Kann nicht einzelne Wert von Array mit einer Funktion in PHP

Das Problem ist, wenn ich eine Funktion zum Echo eines bestimmten Elements des Arrays machen, es funktioniert nicht, wo wie ohne eine Funktion gibt es keine Fehler.

Verbindung herstellen, führen Sie Abfrage, speichere das Ergebnis in der Variablen:

require_once("db.php"); 

$conn = mysqli_connect($servername, $username, $password, $dbname); 
if (!$conn) { 
    die("Connection failed: " . mysqli_connect_error()); 
} 

$query = "SELECT * FROM arlista"; 
$query_result = mysqli_query($conn, $query); 

mysqli_close($conn); 
$result_array = array(); 

ich die Abfrageergebnisse an ein Array übergeben, dann will ich aus dem Array einen einzelnen Wert abzufragen. Das Problem ist, wenn ich eine Funktion wie diese verwende, funktioniert das nicht. Ich kann das Element des Arrays nicht im Browser anzeigen lassen.

function arlista($attr, $rownum){ 
    while($row = mysqli_fetch_array($query_result)){ 
     $result_array[$i] = $row[$attr]; 
     $i++; 
    } 
    echo $result_array[$rownum]; 
} 

arlista("ar",1); 

jedoch das funktioniert, wenn ich nicht eine Funktion verwenden. Der Browser zeigt den Wert an.

while($row = mysqli_fetch_array($query_result)){ 
$result_array[$i] = $row["ar"]; 
$i++; 
} 

echo $result_array[1]; 

Kann jemand erklären, was mit der Funktion falsch läuft oder wie kann ich es reparieren? Vielen Dank!

Der Server läuft PHP 5.6.19

+0

Ich sehe $ i nicht als 0 in Funktion deklariert. – cpugourou

+0

@cpugourou Nicht definierte Variablen werden zu "0", wenn sie in einem arithmetischen Kontext verwendet werden. – Barmar

+0

Danke. Ich habe nie an diesen gedacht. Trotzdem werde ich weiterhin alle meine Variablen korrekt deklarieren ... irgendwie alte Schule. Wahrscheinlich, weil ich nie benutze, um über ein Array zu gehen ... – cpugourou

Antwort

2

Überprüfen Sie Ihr Variablen-Scoping. Ihre Funktion hat keine Variable $query_result. Wenn Sie die Fehlerberichterstattung aktivieren, erhalten Sie auch Hinweise auf das Problem.

eine globale Verwendung funktionieren würde:

function arlista($attr, $rownum){ 
    global $query_result, $result_array; 
    while($row = mysqli_fetch_array($query_result)){ 
     $result_array[$i] = $row[$attr]; 
     $i++; 
    } 
    echo $result_array[$rownum]; 
} 

arlista("ar",1); 

Hoffnung, das hilft!

+0

danke! Ich verstehe jetzt, was das Problem war. –

+0

Ehrfürchtig. Froh, es hat geklappt :-) –

2

Eine Funktion bringt nicht in die Variablen, die Sie nicht innerhalb der Funktion definiert sind, oder übergeben. Da Sie nicht oder in $ query_result und $ bestanden hat definieren result_array, das Skript würde nicht funktionieren. Ohne die Funktion ist diese Variable jedoch definiert, so dass das Skript funktioniert. Damit die Funktion funktioniert, müssen Sie lediglich die Variable $ query_result, $ result_array übergeben oder in der Funktion definieren.

Bearbeiten: Wie Adam sagte, können Sie in der Funktion definieren, um es als globale Variable zu verwenden: global $ query_result, $ result_array;

1

Sie müssen entweder $query_result als Funktionsparameter übergeben oder als globale Variable innerhalb der Funktion definieren.

2

Sie müssen $query_result als Argument für die Funktion übergeben. Sie sollten auch die Variablen initialisieren, die Sie in der Funktion verwenden. Aber es gibt keinen wirklichen Bedarf für die $i Variable, da Sie [] verwenden können, um ein neues Element auf ein Array zu schieben.

function arlista($attr, $rownum, $query_result){ 
    $result_array = array(); 
    while($row = mysqli_fetch_array($query_result)){ 
     $result_array[] = $row[$attr]; 
    } 
    echo $result_array[$rownum]; 
} 

arlista("ar", 1, $query_result); 

könnten Sie auch global $query_result, aber explizite Argumente sind Programmierstil verwenden in der Regel besser.

+0

vielen Dank für die Erklärung, ich verstehe, was jetzt fehlte. es funktioniert gut. –