Einfache SQL-Abfrage mit Join
donald2603
- datenbank
0 Tom0 donald2603
0 dedlfix0 donald26030 Tom
0 Sonar0 Sonar
Hallo Leute, möchte mit PHP über PDO ein Update in die Datenbank einspielen. Datenbank ist eine MySQL 5.
Leider funktioniert es einfach nicht.Hier die Codezeilen:
$abfrage = $pdo->prepare('UPDATE usertabelle SET status=?, gueltigkeit=? JOIN profiltabelle USING benutzernummer WHERE email=?');
$abfrage->bindValue(1,$string);
$abfrage->bindValue(2,$time);
$abfrage->bindValue(3,$mail);
$abfrage->execute();
Die Variablen sind alle befüllt. Das Problem liegt definitiv an der Abfrage. Bestimmt fehlen irgendwo Klammern oder " oder '.
Über Hilfe bin ich sehr dankbar
donald2603
Hello,
Die Variablen sind alle befüllt. Das Problem liegt definitiv an der Abfrage. Bestimmt fehlen irgendwo Klammern oder " oder '.
Was sagt denn
print_r($pdo->errorInfo());
?
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Was sagt denn
print_r($pdo->errorInfo());
?
Die Ausgabe ist: Array ( [0] => 00000 [1] => [2] => )
Das sieht ja so aus, als wären die Variablen leer?
Wenn ich sie aber genau vor der prepare per echo ausgeben lasse, sind sie befüllt.
donald2603
Hello,
Was sagt denn
print_r($pdo->errorInfo());
?
Die Ausgabe ist: Array ( [0] => 00000 [1] => [2] => )
Das sieht ja so aus, als wären die Variablen leer?
Nein, die drei Array-Elemente stehen nicht für die drei Variablen. Dass Du nun gerade drei Variablen hast, ist natürlich ein verwirrender Zufall, da Du scheinbar nicht das Handbuch gelesen hast bisher:
http://www.php.net/manual/en/pdo.errorinfo.php
Das deutet sehr stark auf einen Connection-Error hin. Es ist gar nicht erst ein gültiges Data-Object entstanden.
Zeig doch mal, wie Du die Verbindung zur Datenbank aufbaust und wie Du ein neues PD-Object erzeugt hast.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hello,
Was sagt denn
print_r($pdo->errorInfo());
?
Die Ausgabe ist: Array ( [0] => 00000 [1] => [2] => )
Das sieht ja so aus, als wären die Variablen leer?
Hier noch die Links auf die Error-Codes bei MySQL:
http://dev.mysql.com/doc/refman/5.1/de/error-messages-server.html
http://dev.mysql.com/doc/refman/5.1/de/error-messages-client.html
Da Du leider nicht angegeben hast, welche Datenbankversion von MySQL Du genau benutzt, muss es erst einmal dabei bleiben.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hello,
Was sagt denn
print_r($pdo->errorInfo());
?
Die Ausgabe ist: Array ( [0] => 00000 [1] => [2] => )
Das sieht ja so aus, als wären die Variablen leer?
Hier noch die Links auf die Error-Codes bei MySQL:
http://dev.mysql.com/doc/refman/5.1/de/error-messages-server.html
http://dev.mysql.com/doc/refman/5.1/de/error-messages-client.htmlDa Du leider nicht angegeben hast, welche Datenbankversion von MySQL Du genau benutzt, muss es erst einmal dabei bleiben.
Hallo,
Datenbank ist eine MySQL 5. Hatte ich geschrieben. Mehr weiß ich nicht.
Habe die MYSQL-Anweisung angepasst, nun läuft es:
$abfrage=$pdo->prepare('UPDATE usertabelle JOIN profiltabelle ON usertabelle.benutzername = profiltabelle.benutzername SET status=?, gueltigkeit=? WHERE email=?');
Die Ausgabe ist weiterhin: Array ( [0] => 00000 [1] => [2] => )
Egal, es läuft.
Danke
donald2603
Tach!
$abfrage = $pdo->prepare('UPDATE usertabelle SET status=?, gueltigkeit=? JOIN profiltabelle USING benutzernummer WHERE email=?');
Abfragen, ob Fehler zurückgemeldet werden, sind kein Luxus, sondern gehören zum ordentlichen Programmieren wie die Absicherung beim Klettern. Schau dir im Handbuch die verwendeten Funktionen an und besonder ihre Rückgabewerte und das Verhalten im Fehlerfall. Jedenfalls sagt mir das MySQL-Handbuch zu UPDATE eine andere Syntax. Erst kommen die Tabellenreferenzen, dann die SET-Klausel gefolgt von WHERE. Das Prepare sollte also einen Syntaxfehler melden.
dedlfix.
Tach!
$abfrage = $pdo->prepare('UPDATE usertabelle SET status=?, gueltigkeit=? JOIN profiltabelle USING benutzernummer WHERE email=?');
Abfragen, ob Fehler zurückgemeldet werden, sind kein Luxus, sondern gehören zum ordentlichen Programmieren wie die Absicherung beim Klettern. Schau dir im Handbuch die verwendeten Funktionen an und besonder ihre Rückgabewerte und das Verhalten im Fehlerfall. Jedenfalls sagt mir das MySQL-Handbuch zu UPDATE eine andere Syntax. Erst kommen die Tabellenreferenzen, dann die SET-Klausel gefolgt von WHERE. Das Prepare sollte also einen Syntaxfehler melden.
dedlfix.
Hallo dedlfix,
sehe ich ähnlich, deswegen lautet meine Anweisung auch:
error_reporting(E_ALL);
ini_set('display_errors', 1);
require'index1.php';
In der index1 kommt dann der ganze Code. Kann ja keiner ahnen das E_ALL sich nur auf PHP bezieht und die MySQL-Schnittstelle nicht mit beachtet.
Zu dem Syntax:
Hatte mich am Select orientiert. Der Join wird wohl vor dem SET ausgerufen. Man lernt nie aus. Hatte nur so einen kleinen SQL-Kurs in der UNI, wo aber nur SELECT besprochen wurde.
Danke
donald2603
Hello,
Hatte mich am Select orientiert. Der Join wird wohl vor dem SET ausgerufen. Man lernt nie aus. Hatte nur so einen kleinen SQL-Kurs in der UNI, wo aber nur SELECT besprochen wurde.
Dann passt aber die von Dir gepostete Fehlermeldung (das Array) nicht dazu!
Grüße aus dem schönen Oberharz
Tom vom Berg
Hi,
$abfrage = $pdo->prepare('UPDATE usertabelle SET status=?, gueltigkeit=? JOIN profiltabelle USING benutzernummer WHERE email=?');
diese Abfrage kommt mir reichlich komisch vor.. was willst du denn eigentlich machen?
Das hast du gemacht?
[code lang=php]
<?php
$conn = new PDO($connection_string);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
?>
dann kannst du die Fehler auch mit $conn->errorInfo() auslesen
äh sorry, um eine Exception zu werfen natürlich (CP-Fehler):
<?php
$conn = new PDO($connection_string);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
?>