PHP XAMPP - mysql Query Fehler

cuthbert

Captain
Registriert
Jan. 2007
Beiträge
3.097
Ich versuche gerad mir ein bisschen PHP beizubringen, was eigentlich auch ganz gut klappt. Leider bekomme ich mit meiner XAMPP Installation kein mysql query hin. Es kommt immer der Fehler:
Code:
Fatal error: Call to a member function query() on a non-object...
die entsprechenden Zeilen sehen so aus:
Code:
$db = mysql_connect("localhost","root","","database1");
$sql='SELECT * FROM users WHERE ID=1';

die Datenbank database1 und Tabelle users habe ich via phpMyAdmin erstellt, und auch einen Datensatz eingefügt. phpMyAdmin sagt, dass der Server localhost heißt. Wenn ich ein (falsches) Passwort eingebe, wird auch ein Fehler ausgegeben, dass das Passwort falsch ist. Also scheint zumindest der Zugriff auf die Datenbank zu funktionieren.

Bleibt die Frage, wieso $db ein non-object sein soll, wenn es doch eine Zeile drüber deklariert wurde.
 
Probier mal zuerst die Verbindung zur Datenbank herzustellen:
Code:
mysql_connect("localhost", "root", "");
,
und dann die Datenbank auszuwählen:
Code:
mysql_select_db("database1");
.

So mache ich das immer.
 
Code:
$db = mysql_connect("localhost","root","");
$db = mysql_select_db("database1");
$sql='SELECT * FROM users WHERE ID=1';

Führt leider auch nicht zum Erfolg :(, immer noch der gleiche Fehler
 
Ich würde mal darauf tippen, dass der Fehler nicht an den Codezeilen liegt, die du uns gezeigt hast.
 
Achso ich hatte ja auch das query vergessen. Alle Codzeilen bis zum Fehler sehen so aus:

Code:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
$db = mysql_connect("localhost","root","","database1");
$sql='SELECT * FROM users WHERE ID=1';
$result= $db->query($sql);
....
 
Meine PHP-Kenntnisse sind etwas eingerostet, aber ich bin mir sicher, dass mysql_connect() kein Objekt zurückgibt!

Statt
PHP:
$result= $db->query($sql);
machst du lieber
PHP:
$result= mysql_query($sql);
oder glaube ich auch explizit
PHP:
$result= mysql_query($sql, $db);
 
Ok, daran scheints wohl nicht gelegen zu haben, ich bekomme jetzt folgende Warnung:
Code:
Warning: mysql_query() expects parameter 2 to be resource, boolean given

also scheint doch irgendwas mit
Code:
$db = mysql_connect("localhost","root","","database1");
nicht zu stimmen, und $db wurde wohl nicht richtig gesetzt. Aber ich habe leider keine Ahnung was falsch ist.
 
Wie kommst du auf die Idee, dass was mit mysql_connect() nicht stimmt, wenn die Warnung klar von mysql_query() redet? Der Warnung entnehme ich, dass du mysql_query falsch benutzt. Code bitte! Und zwar soviel vom Code wie möglich.

Nachtrag: Du hast Glück gehabt, denn du hast recht :) Der vierte Parameter von mysql_connect erwartet ein boolean, der für deinen Zweck aber unwichtig ist. Lass den vierten Parameter weg und wähle die DB mit
PHP:
mysql_select_db("database1", $db);
Wegen des Fehlers liefert mysql_connect() nun einen boolean (false) und keine Ressource.
 
Zuletzt bearbeitet:
So ich habe nochmal rumprobiert. Anscheinend kommt die php Version nicht mit diesen "->" Methodenzuweisungen zurecht (hatte das aus dem Quakenet PHP Tutorial).

Wenn ich alle Funktionen ausschreibe, also so:
Code:
$db = mysql_connect("localhost","root","l");
mysql_select_db("database1",$db);  
$sql='SELECT * FROM users WHERE ID=1'; 
$result = mysql_query($sql, $db);

dann funktioniert es. Danke für die Hilfe.
 
Der -> Operator wählt Member-Variablen oder Methoden eines Objektes aus. Deine PHP-Version unterstützt das ganz sicher, sonst würde die Fehlermeldung in deinem Eröffnungs-Beitrag nicht explizit anmäkeln, dass $db kein Objekt wäre. Wenn das wirklich genau so in einem Tutorial stand, dann ist das Tutorial fehlerhaft.

Das Problem ist ganz einfach, dass mysql_connect eine Ressource zurückgibt und kein Objekt.
 
Also habe ich bis jetzt immer vergssen die resource mit zu übergeben. Habs gerad probiert

Code:
$result = $db->query($sql, $db);

Das funktioniert auch, wobei ich die Syntax so nicht so ganz verstehe (haben resourcen auch Methoden?). Komisch dass die das im Tutorial net gesagt haben. Oder gibts Umstände unter denen man die Resource weglassen kann? Ich werd mir dann wohl mal ein anderes PHP Tutorial suchen müssen :)... Noch ist mir auch der Unterschied von einem Objekt und einer Resource nicht klar. Ist letzteres eine art Zeiger bzw Verweis?


EDIT: ich hab jetzt gesehen wo mein Fehler lag. Der Befehl hätte
Code:
mysql[B][COLOR="Red"]i[/COLOR][/B]_connect("localhost","Daniel","Daniel","database1")
lauten müssen, so wies auch im Tutorial stand :/
 
Zuletzt bearbeitet:

Ähnliche Themen

Antworten
8
Aufrufe
1.074
T
Antworten
5
Aufrufe
1.000
Antworten
5
Aufrufe
1.320
Y
Antworten
5
Aufrufe
1.386
Zurück
Oben