Mehrfach-Statements - Multi Query und UPDATE

phpameise

Mitglied
Ich komme nicht weiter. Hat jemand Zeit? Ich habe folgenden Code:
PHP:
<?php
 
// Neues Datenbank-Objekt erzeugen
$db = @new mysqli( 'localhost', 'root', '', 'tutorials' );
// Pruefen ob die Datenbankverbindung hergestellt werden konnte
if (mysqli_connect_errno() == 0)
{
    
    // Multi-Query zusammenstellen
    $sql  = sprintf( "INSERT INTO `tblmoderatoren` (`name`, `bereich`) VALUES ('%s', '%s');", $_SESSION['name'], $_SESSION['bereich'] );
    $sql .= 'SELECT `name`, `bereich` FROM `tblmoderatoren` WHERE `id` = LAST_INSERT_ID();';
    if ($db->multi_query( $sql ))
    {
        do
        {
            // Erstes Abfrageergebnis ausgeben
            if ($ergebnis = $db->store_result())
            {
                echo $ergebnis->num_rows. " Ergebnisse gefunden<br />";
                // Abfrageergebnis ausgeben
                while ($zeile = $ergebnis->fetch_object())
                {
                    echo $zeile->name. " ist zust&auml;ndig f&uuml;r " .$zeile->bereich. "<br />";
                }
                $ergebnis->close();
            }
        } while ($db->next_result());
    }
}
else
{
    // Es konnte keine Datenbankverbindung aufgebaut werden
    echo 'Die Datenbank konnte nicht erreicht werden. Folgender Fehler trat auf: <span class="hinweis">' .mysqli_connect_errno(). ' : ' .mysqli_connect_error(). '</span>';
}
// Datenbankverbindung schliessen
$db->close();
 
?>
Das funktioniert auch. Aber Jetzt möchte gleichzeitig noch ein UPDATE einfügen.
PHP:
$sql .= 'UPDATE `tblmoderatoren` SET `md5_id` =$md5_id WHERE `id` = LAST_INSERT_ID();';
Das Problem ist
PHP:
$md5_id
Wenn ich da zum Beispiel stat der Variablen die Zahl 4 hinschreibe geht es auch. Die Variable ist definitiv vorhanden und kann ich auch mit echo ausgeben.
 
Zuletzt bearbeitet:
Was ist die Spalte md5_id in der Tabelle tblTestPersonal denn für ein Datentyp? INT? CHAR? VARCHAR?

IMHO sollte es mindestens CHAR(32) sein, denn ein MD5-Hash hat Hex-Werte (also Zahlen von 0-9 und Buchstaben von A-F) mit der Anzahl von 32 Stellen. Dann müsste dein Query aber so aufgebaut sein:

PHP:
$sql .= 'UPDATE `tblTestPersonal` SET `md5_id` = '$md5_id' WHERE `id` = LAST_INSERT_ID();';
 
(Hatte mich in den Tabellen vertippt)Das Feld md5_id ist varchar(200). Wenn ich das ganze nach alter Manier mit
PHP:
$sql_insert und mysql_query
und dann mit
PHP:
 ("$user_id = mysql_insert_id($link);  
$md5_id = md5($user_id);
mysql_query("update tblmoderatoren set md5_id='$md5_id' where id='$user_id'");
Geht es auch.
 
Hmm, geht es denn jetzt oder noch nicht? Du hast in deinem ursprünglichen Post auch nach der Änderung keine Single-Quotes um $md5_id im Query. Das halte ich für den Fehler.
 
Also es geht jetzt so:
PHP:
$sql .= "UPDATE tblmoderatoren SET md5_id = '" . $md5_id . "' WHERE id = LAST_INSERT_ID();";
Aber in einem anderen Forum wurde mir gerade von Multi Query abgeraten ************ Error-Meldungen gibt es nur zum ersten SQL-Statement.
 
Das ist nicht richtig, um an die Fehlermeldungen der anderen Queries nach dem ersten zu kommen, musst du mysqli_next_result() oder eben die Klassen-Methode verwenden, aber das schreibt auch das Manual bereits:

reject note Return Values

Returns FALSE if the first statement failed. To retrieve subsequent errors from other statements you have to call mysqli_next_result() first.

Ich dachte, du wärst dir darüber im Klaren.
 
Zurück