2016-05-22 3 views
0

Ich habe High und Low für eine Antwort auf diese Suche, aber ich bin entweder etwas fehlt, oder ich kann einfach nichts in diesem Zusammenhang finden .Übergabe msqli an eine Funktion - kann nicht herausfinden, warum es nicht funktioniert

Hintergrund - versuchen Spaghetti Raserei mit einem kleinen Casual-Projekt zu vermeiden Ich fange an; Ein Teil davon wird hauptsächlich nur Aufrufe einer mysql-Datenbank beinhalten, die den Inhalt der Tabelle anzeigen und so weiter. Einfach ausgedrückt, wie ein CRM, denke ich.

Ich bin vielleicht weit weg von der Basis, aber ich möchte in der Lage sein, meine SQL-Aufrufe als Funktionen zu erstellen, die helfen, wenn/wenn ich zwicken und tunen, sowie einen saubereren Code für das, was ich suche, erstellen machen.

So ohne weiteres, ich habe dies als demomstration:

echo "<table>"; 
selectall('actions','content',$mysqli); 
echo "</table><br><br>"; 

Was das bedeutet ist, zeigen alle Zeilen aus meiner Tabelle ‚Aktionen. "content" ist nur ein Beispiel für einen Feldnamen, den ich weitergeben möchte und den ich anzeigen möchte, da dies der wichtigste für den Benutzer relevante Feldname in dieser Tabelle ist. Ich übergebe auch $ mysqli hier für meine Funktion db call.

Meine Funktion sieht wie folgt aus:

function selectall($s_table,$s_content,$mysqli){ 
    $query = "SELECT * FROM " . $s_table; 
    $resource = $mysqli->query($query); 
       if (!$resource) throw new Exception($db->error); 
       while ($row = $resource->fetch_assoc()) { 
        $id = $row['id']; 
        echo "<tr><td>{$row[$s_content]}</td></tr>"; 
       } 
    $resource->free(); 
    $mysqli->close(); 
} 

aber .... es nicht funktioniert, und es scheint, einen wackeligen Spruch zu werfen:

Warning: mysqli::query(): Couldn't fetch mysqli 

Diese innerhalb der Aktion Punkte die Zeile $ resource = $ mysqli-> query ($ query);

weiß, dass ich die Funktion und alles in Ordnung ist, als ob ich neu formulieren und $ mysqli innerhalb der ersten Zeile der Funktion, wie so erklären ...

$mysqli = new mysqli(username password and so on in here); 

... es funktioniert genau richtig.

$ mysqli existiert und arbeitet innerhalb desselben Codes, der auch die Variable innerhalb der Funktion übergibt.

Dies ist eine frühe Phase, also habe ich den Code um den $ mysqli Pass ins Leben gestoßen, vielleicht habe ich den Code etwas unordentlicher gemacht, also sollte ich mir nicht zu viele Gedanken darüber machen.

Wer irgendwelche Ideen, warum es das nicht mag? oh

+0

Als Update habe ich festgestellt, dass, wenn ich $ msqli vorher erklären, es funktioniert auch .. 'Mysqli $ = new mysqli ('Verbindung info'); Echo "

"; selectall ('actions', 'content', $ mysqli); echo "


"; ' –

Antwort

0

D'...

Ich hatte einen

$mysqli->close(); 

in den obigen Zeilen. Ich habe mich selbst gelöst.

als Referenz, das ist meine Funktion:

function selectall($s_table,$s_field,$mysqli){ 

if ($mysqli->connect_error) {die('Connect Error (' . $mysqli->connect_errno . ') '. $mysqli->connect_error);} 
$s_table = preg_replace('/[^0-9a-zA-Z_]/', '', $s_table); // Cleans up the table name variable 
$s_field = preg_replace('/[^0-9a-zA-Z_]/', '', $s_field); // Cleans up the field name variable 
$query = "SELECT * FROM " . $s_table; // Adds passed table name to the select all 
$resource = $mysqli->query($query); 

if (!$resource) throw new Exception($db->error); 

while ($row = $resource->fetch_assoc()) { 
    echo "<tr><td>{$row[$s_field]}</td></tr>"; // Content for each row of the select all 
    } 
$resource->free(); 
$mysqli->close(); 
} 

Wie Sie sehen können, ich habe auch versucht, die Variablen zu schützen, die die Funktion ein.

Dies kann über aufgerufen werden:

selectall('actions','content',$mysqli); 

In diesem Zusammenhang möchte ich Tabelle nach dem Feldnamen ‚Inhalt‘ alle Einträge in der ‚Aktionen‘ sehen.Diese Funktion, mit einigen Code oben und unten für eine Tabelle, erstellt eine neue Zeile für jeden Eintrag.

Ich werde wahrscheinlich ein paar entwickeln, bereits erstellt, dass enthält eine Schaltfläche zum Löschen am Ende der Zeile, die 'selectalldel' ist.

Offen für Kommentare, ob das eigentlich lohnenswert ist, aber ich dachte, ich würde meine korrigierte Dummheit posten, falls jemand das nützlich findet.

+0

Diese Funktion ist ziemlich nutzlos. Bald wirst du erfahren, dass du nie eine Abfrage wie select * aus der Tabelle –

+0

brauchst. Das ist eine defätistische Einstellung. Bei der Entwicklung geht es ihrem Wesen nach darum, etwas zu nehmen und zu verbessern. Der einzige Unterschied zwischen Ihrer Beurteilung und ihrer Widerlegung besteht darin, eine zusätzliche Variable zu übergeben, um die zu zeichnenden Felder zu definieren (was ich bereits getan habe). –

+0

Ah, kein Problem. Sie werden lernen, dass eine Abfrage wie Select foo, bar from table ebenfalls nutzlos ist. –

Verwandte Themen