PHP- / MySQL-Problem

GarGod

Erfahrenes Mitglied
Hallo leute,
habe ein Problem und zwar wird folgendes in der mysql console erfolgreich ausgeführt:
Code:
$sql = "INSERT IGNORE INTO `usr`
                                    (`name`,`pw`,`email`,`regDate`)
		 		      VALUES
                                      ('".$name."', '".md5($pw)."','".$email."','".time()."');
		INSERT INTO `usr_profil`(`u_id`) 
                                      SELECT `id` FROM `usr` 
                                    WHERE `name` = '".$name."' AND `pw` ='".md5($pw)."'";
aber wenn ich dann nun per mysql_Query($sql) das ganze über php abschicke, passiert nichts in der Datenbank.
Eine fehlermeldung bekomme ich seitens PHP auch nicht, wenn jemand ne idee hätte

Wenn ich mir $sql per echo ausgeben lasse bekomme ich auch meine eingegebenen daten.
Code:
INSERT IGNORE INTO `usr`(`name`,`pw`,`email`,`regDate`) VALUES('131231231', 'ea914fe9e99eec031d7d083a996aa563','123@daw.de','1241317374'); INSERT INTO `usr_profil`(`u_id`) SELECT `id` FROM `usr` WHERE `name` = '131231231' AND `pw` ='ea914fe9e99eec031d7d083a996aa563'

MFG
Garlof
 
Zuletzt bearbeitet:
Achso ja klar, hab die Fehler ausgabe an und sowohl mysql_error, als auch durch error_reporting(e_all) bekomm ich kein fehler.
Kann es denn sein, dass mysql_query keine zwei aneinander hängende MySQL anweisungen verarbeiiten kann?
lg
 
Kann es denn sein, dass mysql_query keine zwei aneinander hängende MySQL anweisungen verarbeiiten kann?
lg

Von PHP aus ist es genau so.
Mehrzeiler mit Semikolon werden in phpMyAdmin auch nur auseinander genommen und einzeln verschickt.
Aber selbst dazu müsstes mysql_error() ein Fehler anzeigen.
 
Mehrzeiler mit Semikolon werden in phpMyAdmin auch nur auseinander genommen und einzeln verschickt.

Da es mich interessiert hat, ob man wirklich zwei Query absenden kann, habe ich das obige Szenarion mal nachgebaut. mysql_error() sagt mir jedoch folgendes:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO `usr_profil` (`u_id`) SELECT `id` FROM `usr` WHERE `name` = '1312312' at line 1
Ausgeführt wird demnach nichts, jedoch bekomme ich im Gegensatz zum Threadstartet eine Fehlermeldung...
Bist du sicher das du dir auftretende Fehler ausgeben lässt?

Über phpMyAdmin funktioniert es wie schon gesagt ohne Probleme, genau so funktioniert es, wenn man die beiden Query getrennt voneinander über mysql_query() absendet.

Bei mir läuft PHP Version 5.2.6 und MySQL 5.0.75, falls das von Bedeutung ist. (Bin gerade zu faul selbst zu schauen. ;))
 
Ja bekomme ne Fehlermeldung, verschicke die Formular eingaben Asychron und hatte natürlich in der datei, die die Daten verabeitet kein error_reporting eingeschaltet.
Ist aber schon ziemlich schlecht, wenn man keine Mehrzeiler verschicken kann. Gibt es denn keinen weg, wie man bei einem INSERT die mysql_querys minmieren kann um die DB zu schonen? lässt sich dies vllt. über native funktionen in MySQL selber umsetzen?
 
Klar. Du kannst mehrere Sachen gleichzeitig einfügen:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

Oder ein Update ausführen wenn die Zeile schon existiert:
http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html
INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c+1;

Aber "Tabellenübergreifend" wirst du sicherlich kein passenden INSERT finden. Damit sperrst dir zudem zwei Tabellen gleichzeitig, was bestimmt nicht gut ist ;)

Für die Performance in PHP gibt es noch "Prepared-Statements" in den PDO-Klassen. Dazu müsstest alles umstellen auf PDO. http://www.php.net/pdo
 
Zuletzt bearbeitet:
Naja aber wenn mal eine Datenbank normalisiert, dann ist es ja zwingend notwendig, nicht nur eine Tabelle mit daten zufüllen, sondern man möchte ja auch anderen Tabelle mit der neu eingefügten verknüpfen um später mit joins arbeiten zu können.
Es kann doch nicht im sinne des erfinders sein, dass ich jetzt wie folgt vor gehen muss:

mysql_query(INSERT Tabelle Benutzer blabla)
mysql_query(INSERT Tabelle BenutzerDetails b_id = 12)
mysql_query(INSERT Tabelle BenutzerBilder b_id = 12)
Oder. verstehe ich jetzt einfach was falsch?
 
Naja. Du bewegst dich zwischen zwei "Sprachen".
Da geht halt nur Satz für Satz durch, anstatt den ganzen Aufsatz direkt zu übersetzen ;)

Das muss schon so. Alles richtig verstanden. Wenn du ein "Mehrzeiler" haben willst dann schreib dir eine Funktion dafür ;)

PHP:
function query($str)
{
  $a = explode(";", $str); // z.B. ist aber Fehleranfällig
  foreach ($a as $str)
  {
    // tu es.
  }
}

Wenn man was nicht mag in PHP einfach umschreiben, neu schreiben oder eigenes hinzufügen ;)

Und wenn du alles in ein Query zwingen willst probier doch mal UNION: http://dev.mysql.com/union
Vielleicht geht das ja auch für INSERT.
 
Zuletzt bearbeitet:
Zurück