MySQL script in PHP laufen lassen

Liebe/-r Experte/-in,
ich nutze PHP und MySQL jeweils in der aktuellsten Version. Ich möchte einen MySQL-Script, den ich im QueryBrowser benutze, auch in PHP nutzen.
Um mehrere Statements zu verarbeiten nutze ich mysqli.
Der SQL-Skipt sie ungefähr so aus:

set @x1 = „‚TEST‘“;
set @chgdate = „‚2011-12-07‘“;
set @comment = „‚updated by svs‘“;
set @s = concat(‚INSERT INTO tbl1 (changetext, changedate, comment) select ‚,@x1,‘,‘,@chgdate,’,’,@comment,’ from
tbl2 where tbl2.sourcetext in (’,@x1,’)’);
PREPARE stmt FROM @s;
execute stmt;

Der SELECT nach dem INSERT ist notwendig, um nur valide Daten zu inserten.
Der Skript liegt in einer sql-Datei und wird von php mittels fread eingelesen. Danach führe ich eine mysqli_multi_query mit dem übergebenen sql-string aus.
Das funktioniert mit einfachen Skipten, in denen z.b. 2 INSERTS hintereinander kommen. Beide INSERTS werden erfolgreich abgearbeitet.

Leider scheint das nicht mit „SET“ und „PREPARE“ usw. zu gehen. Gibt es da eine Einschränkung, daß z.b. von mysqli nur selects und inserts gemacht werden können?
Oder habe ich etwas anderes falsch gemacht?
Vielen Dank.

Sven Schulze

Tut mir leid, weiss ich leider nicht.

Hallo Sven Schulze,

danke für die Nachfrage. Aber, leider kann ich nicht helfen, da ich wohl dafür nicht Experte genug bin. Ich arbeite zwar ständig mit php und mySQL, aber mit solchen scripten hatte ich noch nicht zu tun. Habe meine Dinge immer rein in php programmiert.

Viele Grüße und viel Erfolg bei der Problemlösung.

Werner Esdohr

hallo sven ich habe dir mal zwei varianten aufgeschrieben. getestet habe ich das ganze nicht aber so sollte es gehen. ich finde es übersichtlicher.
alles liebe
roland dreix

<?php $x1 = "TEST";
$chgdate = "2011-12-07"; $comment = "updated by svs"; //Variante 1 $mysql\_text="INSERT INTO tb11 SET changetext='".$x1."', changedate='".$chgdate."', comment='".$comment."' ";echo(" ".$mysql\_text." "); $daten=mysql\_query($mysql\_text); echo(mysql\_error()); $anzahl=mysql\_affected\_rows(); echo($anzahl); //Variante 2 $mysql\_text="INSERT INTO tbl1 SET changetext=(SELECT changetext FROM tbl2 WHERE tbl2.changetext='".$x1."'), changedate=(SELECT changetext FROM tbl2 WHERE tbl2.changedate='".$chgdate."'), comment=(SELECT changetext FROM tbl2 WHERE tbl2.comment='".$comment."') ";echo(" ".$mysql\_text." "); $daten=mysql\_query($mysql\_text); echo(mysql\_error()); $anzahl=mysql\_affected\_rows(); echo($anzahl); ?\>

Hallo!
Vielen Dank für die Antworten.
Hat sich erledigt. Ich hatte vergessen dem MySQL Benutzer das EXECUTE Recht zu geben. Nun funtioniert es.

Gruß,

Sven

Liebe/-r Experte/-in,
Der SQL-Skipt sie ungefähr so aus:

set @x1 = „‚TEST‘“;
set @chgdate = „‚2011-12-07‘“;
set @comment = „‚updated by svs‘“;
set @s = concat(‚INSERT INTO tbl1 (changetext, changedate,
comment) select ‚,@x1,‘,‘,@chgdate,’,’,@comment,’ from
tbl2 where tbl2.sourcetext in (’,@x1,’)’);
PREPARE stmt FROM @s;
execute stmt;

Das funktioniert mit einfachen Skipten, in denen z.b. 2
INSERTS hintereinander kommen. Beide INSERTS werden
erfolgreich abgearbeitet.

Leider scheint das nicht mit „SET“ und „PREPARE“ usw. zu
gehen. Gibt es da eine Einschränkung, daß z.b. von mysqli nur
selects und inserts gemacht werden können?
Oder habe ich etwas anderes falsch gemacht?

Hallo Sven,

mit dem, was Du da vorhast kenne ich mich leider nicht aus.

Dennoch alles Gute Dir

Baer

Hallo,

Versuch mal das Beispiel auf http://php.net/manual/en/pdo.prepared-statements.php nachzuprogrammieren.

Ciao!
Kai

Entschuldig, hatte die falsche Seite auf dem Radar. Das Beispiel ist hier: http://www.php.net/manual/en/mysqli.prepare.php

Hallo,

Versuch mal das Beispiel auf http://php.net/manual/en/pdo.prepared-statements.php nachzuprogrammieren.

Ciao!
Kai

ich kann die frage nicht beantworten weil mir völlig unklar ist, warum ein das statement nicht in php zusammengesetzt und als einzelnes query gesendet werden soll

Hallo,

leider kann ich dir nicht helfen. Aber ein Gedanke: warum MySQL-Variablen? Geh doch da mit etwas mehr PHP-Code ran – da hast du alle Freiheiten. Multi-Queries mit PHP-Unterstützung ist meines Erachtens gar nicht nötig.

LG

Ajo

Servus,

meines Wissens beherrscht mySQL das nicht. Dafür brauchst du Postgre oder Oracle.

Aber in php kannst du die beiden Dinge „aufdrüseln“ und damit bei mySQL bleiben.

Gruß
widecrypt

Leider scheint das nicht mit „SET“ und „PREPARE“ usw. zu gehen.

Was genau passiert denn dann?

Gib mal die Fehlermeldung danach aus… Beispiel-Code:

if ($mysqli->errno) {
echo "Stopped while retrieving result : ".$mysqli->error;
}

Gibt es da eine Einschränkung, daß z.b. von mysqli nur
selects und inserts gemacht werden können?

Ich habe damit (Mysql-Scripte über dieses Interface) noch keine Erfahrung gesammelt und kann Dir da nur allgemein helfen.

Kommt evtl. eine Benutzung von mysqli->prepare() in Frage (siehe http://www.php.net/manual/de/mysqli.prepare.php)?

LG
Stefan

Hi,

tut mir leid dass ich auf deine Anfrage nicht geantwortet habe da ich die eMail-Addresse die ich bei wer-weiss-was.de angegeben habe für ca. ein Jahr nicht genutzt habe.

Ich hoffe dir konnte in der Zwischenzeit jemand anderes weiterhelfen.

Bis bald,

Daniel