Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] prepared statement nach einem multi_query

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] prepared statement nach einem multi_query

    Hallo Leute,
    in einer funktion werden bei mir ein mutli_query(update) und danach ein prepared_statement(select) in der gleichen tabelle ausgeführt.
    Wenn ich den multi_query auskommentiere bekomme ich keinen Fehler.
    wenn ich beide laufen lassen will bekomme ich ein:
    Code:
    Warning: mysqli_stmt::bind_param(): invalid object or resource
    Kann es sein das es daran liegt, dass die tabelle noch gesperrt ist?
    (ich nutze mysql mit INNO_DB tabellen)
    Wenn ja was muss ich tun,damit das statement erst ausgeführt wird,wenn der update fertig ist?
    mein code:
    PHP-Code:
    ..
    $multi_query=' UPDATE tabelle SET feld=x WHERE Bedingung; '
                     
    .' UPDATE tabelle SET feld=x  WHERE Bedingung; '
                     
    .' ... ; ';
    $db->multi_query($multi_query);


    $statement$db->stmt_init();
    $query "SELECT FROM tabelle WHERE ..."

    $statement->prepare($query);
    $statement->bind_param('ii',$id_1,$id_2);
         
    $statement->execute();
    ... 

  • #2
    PHP-Code:
    $statement->bind_param('ii',$id_1,$id_2); 
    Sicher dass das syntaktisch richtig ist?
    Edit: Entschuldige, ich hatte gerade PDO im Kopf

    Übrigens interessant, in der selben Query die SQL-Befehle einmal uppercase, einmal camalcase und einmal lowercase zu schreiben
    Die mysql_* Erweiterung ist veraltet!
    Besser: mysqli_* oder (noch besser) PDO

    Kommentar


    • #3
      ja,ich weiß normal nehm ich nur uppercase,aber ich hatte das hier nur schnell hingeklatscht,um nicht die originalabfrage zu verwenden
      ich denke schon,es geht ja wie gesagt,wenn mindestens einer der beiden queries auskommentiert ist..
      ANMERKUNG:Ich habs jetzt nochmal für dich verschönert,damit die Augen auch was davon haben

      Kommentar


      • #4
        Zitat von easyAnfaenger26 Beitrag anzeigen
        Hallo Leute,
        dein Select ist syntaktisch falsch.
        PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

        Kommentar


        • #5
          Wie kann es dann sein dass die Query alleine funktioniert?
          Vielleicht hat er das auch einfach falsch abgeschrieben.

          Übrigens sollte man den Code immer als original posten und private Dinge rauslöschen, denn beim Neuschreiben schleichen sich oft mal Fehler ein, die eigentlich gar nicht da wären.
          Die mysql_* Erweiterung ist veraltet!
          Besser: mysqli_* oder (noch besser) PDO

          Kommentar


          • #6
            ok,ich schicke besser doch den original code:
            PHP-Code:
            $db=Singleton_DB::getInstance();
                
                
            $delete_query='UPDATE nachrichten SET deleted_receiver=1 WHERE trash_receiver=CURRENT_DATE - INTERVAL 3 DAY AND trash_receiver IS NOT NULL ;'
                            
            ' UPDATE nachrichten SET deleted_sender=1 WHERE trash_sender=CURRENT_DATE - INTERVAL 3 DAY AND trash_sender IS NOT NULL ;'
                            
            ' DELETE FROM nachrichten WHERE deleted_sender=1 AND deleted_receiver=1; ';
                
            $db->multi_query($delete_query);
                
                
                
            $statement$db->stmt_init();
                
            $Papierkorb 'SELECT nachricht_id,betreff,typ,gesendet, '
                                        
            'gelesen,account.profilname '
                                        
            'FROM nachrichten JOIN account ON empfaenger_id=account.user_id WHERE '
                                        
            '(empfaenger_id=? AND nachrichten.deleted_receiver IS NULL) '
                                        
            'OR '
                                        
            '(absender_id=? AND nachrichten.deleted_sender IS NULL);'
                
            $statement->prepare($Papierkorb);
                
            $statement->bind_param('ii',$_SESSION['user_id'],$_SESSION['user_id']); //hier tritt der Fehler auf 
            EDIT: IN myphpadmin laufen die queries auch(einzeln jedenfalls)

            Kommentar


            • #7
              Ich habe jetzt mal eine neue Datenbankverbindung nach dem ersten query eingefügt und es geht:
              PHP-Code:
              $db->close();
              $db =new mysqli(...);
              $db->set_charset("utf8"); 
              Ist das normal? ich wollte doch mit meinem Singleton_DB immer nur mit einer verbindung arbeiten,um recourcen zu schonen..

              Kommentar


              • #8
                wenn ich das richtig in errinnerung hab muss man nach nem multi-query das hier nutzen:
                PHP-Code:
                while ($db->next_result()) {
                    ;

                weiß leider nicht mehr warum
                liebe Grüße
                Fräulein Dingsda

                Kommentar


                • #9
                  joa das geht

                  is ja quasi das äquivalent zu $statement->close(); ?!

                  Kommentar


                  • #10
                    Nein.

                    Die Resultsets müssen abgerufen werden, weil dort nicht nur Results sondern auch Fehlerinformationen stehen können. Ohne das man die Results abruft, weiss der Treiber nicht, welches Query welchem Result zugeordnet wird (man muss sozusagen "in sync" bleiben).
                    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                    Kommentar

                    Lädt...
                    X