PDO-Objekt leer
Dies ist mein code:
class DB {
static $instance;
function get() {
if (self::$instance === null) {
self::$instance = new PDO('mysql:host=localhost;dbname=forum', 'root', 'root');
}
return self::$instance;
}
function getAllUsers() {
$users = array();
$sql = "SELECT * FROM users";
foreach (self::get()->query($sql) as $row) {
$users[] = new User($row);
}
return $users;
}
}
Nun bin ich auf den Aufruf der getAllUsers Funktion hier:
class App {
function showUsers() {
$users = DB::getAllUsers();
}
Außer die geben mir einen Fehler:
Warnung: Invalid argument für foreach geliefert()
Wenn ich dabei bin var_dump
auf self::get
im immer eine bool(false)
Kann mir jemand sagen was ich falsch mache?
- Ich möchte darauf hinweisen, dass var_dump(self::get()) zeigt-Objekt(PDO)#2 (0) { }
- Warum bist du nicht
try/catch
ing und auslösen von Ausnahmen? Sie nicht Ihre Klasse jede route, die ordnungsgemäß fehl hier. - Wenn Sie rufen Sie Ihre Instanz der Klasse mit
self::get()
, dannget()
erklärt werden solltestatic
. - Mein Erster Gedanke war, dass der Fehler versteckt war, als ich noch nicht die Datenbank erstellt noch. Aber ich habe es umgeben mit einem try - /catch-und ist es immer noch nicht, dass Sie mir einen PDOException
- Die Klasse soll statisch sein, ja, im wissen das. Aber aus irgendeinem Grund, es funktioniert immer noch ohne das Schlüsselwort static. Ich bin immer ein pdo-Objekt zurück
- Haben Sie versucht, php.net/manual/en/pdo.errorinfo.php?
- Ok, es ist nun behoben, die ich erstellt habe die Tabelle und die Datenbank. Noch ich finde es ziemlich komisch, dass die 1. obwohl die Funktion ist nicht statisch, ich bin immer noch in der Lage, es zu nennen, und 2. auch wenn try/fangen die pdo->query war ich noch nicht immer Fehler. Jedenfalls ist es jetzt behoben
- Ja, es funktioniert, check out
stackoverflow.com/questions/13435405/... und stackoverflow.com/questions/2439036/... - Statische Klassenmethoden können aufgerufen werden, solange Sie nicht versuchen, auf etwas, das in einem eigenen instanziierten Objekte. Siehe: codepad.org/BhrBiXPE Es ist immer so. Wenn Sie beabsichtigen, verwenden Sie eine Methode als static, beschriften Sie Sie als statisch, so dass Sie nicht versehentlich übersehen und etwas tun sollte man eigentlich nicht tun.
Du musst angemeldet sein, um einen Kommentar abzugeben.
PDO::query gibt eine PDOStatement Objekt nur, wenn es erfolgreich ist in dem senden der Abfrage an die Datenbank und wieder eine gültige Antwort (d.h. es sind keine SQL-Fehler zurückgegeben (durch den Treiber). Jedoch in dem Fall, dass es fehlschlägt, wird es wieder
false
. So müssen Sie dies überprüfen, um Fehler zu behandeln. Sie können auch wahlweise PDO in Ausnahme-Modus zu haben, ist es eine Ausnahme zu jeder Zeit es auf einen Fehler stößt. So können Sie try/catch Fehler zu behandeln, wenn Anruf auf PDO-Objekte. Siehe das Beispiel unten...Mit PDO ' s Standard-Fehler-Modus (silent):
Mit PDO Exception-Modus:
+1
für die ersten drei Aussagen. Genau meine Gedanken.:)