PHP PDO CRUD-Klasse Rufen Sie an eine member-Funktion rowCount() on a non-object
Ich fange gerade mit PDO zu bewegen Weg von mysqli aber ein problem. Ich bin nach einem tutorial, und ich möchte ein array zurückgeben, von der Datenbank, aber ich bekomme die folgende Fehlermeldung:
Fatal error: Call to a member function rowCount() on a non-object in C:\xampp\htdocs\phptuts\crud\core\managedb.class.php on line 27
Hier ist meine managedb.php Klasse:
<?php
class ManageDatabase
{
public $link;
function __construct()
{
include_once('database.class.php');
$conn = new database;
$this->link = $conn->connect();
return $this->link;
}
function getData($table_name, $id=null)
{
if(isset($id))
{
$query = $this->link->query("SELECT * FROM $table_name WHERE id = '$id' ORDER BY id ASC");
}
else
{
$query = $this->link->query("SELECT * FROM $table_name ORDER BY id ASC");
}
$rowCount = $query->rowCount();
if($rowCount >= 1)
{
$result = $query->fetchAll();
}
else
{
$result = 0;
}
return $result;
}
}
Dann bin ich einfach mit dem folgenden code, um zu versuchen und erhalten eine Antwort:
<?php
include_once('../core/managedb.class.php');
$init = new ManageDatabase;
$table_name = 'users';
$data = $init->getData($table_name);
print_r($data);
Dies ist, wenn ich bekomme den Fehler, Irgendwelche Ideen?
- Sollten Sie eine vorbereitete Abfrage, falls Ihre übergabe-Parameter
$id
- Ok, lege ich den SQL direkt in phpmyadmin ein und bekam die Ergebnisse, die ich erwartet hatte, aber seine Rückkehr mich ein bool(false), wenn dabei ein var_dump direkt in das Skript, so dass ich denke, etwas ist schief in meinem $rowCount-Funktion, ich kann einfach nicht herausfinden, was.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde
var_dump($query)
vor der$rowCount = $query->rowCount();
Linie, um zu sehen, was es tatsächlich ist, denn scheinbar ist es nicht ein Objekt. Ich vermute, es ist entweder NULL oder leer, weil die ganze$this-link->query(<sql statement>);
nicht zurückkehren, was Sie erwartetEin paar Dinge zu checken:
Aus der PHP-Handbuch:
Werden Sie wollen, um zu testen, ob die Abfrage erfolgreich ist, und wenn nicht, warum. Sie können überprüfen Sie den Fehler mit Hilfe von PDO ' s
errorInfo
Funktion:Andere Sache zu beachten ist, dass
rowCount()
im PDO liefert die betroffenen Zeilen aus einem INSERT /UPDATE /DELETE type-Anweisung. Für ein WÄHLEN, erhalten Sie möglicherweise eine Zeile zu zählen, oder Sie können es nicht. Das Handbuch schlägt vor, einen separaten Abfrage die Anzahl der Zeilen, aber in deinem Beispiel könnte es sein, einfacher Test, wenn Sie nichts zurück von fetchAll():