Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] PDO - dynamisches Insert-Query funzt nicht

Einklappen

Neue Werbung 2019

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

  • [Erledigt] PDO - dynamisches Insert-Query funzt nicht

    Halli hallo hallöle ,

    ich versuche derzeit eine PHP-Klasse zur Vereinfachung von SQL-Abfragen zu schreiben. Da PDO die neue Schnittstelle zwischen PHP und SQL ist will ich natürlich auch diese verwenden.

    Nun zu meinem Problem:

    Wenn ich mir ein "INSERT INTO" zusammenbaue erhalte ich am Ende diesen String:
    PHP-Code:
    "INSERT INTO `canvas_img` (`code`,`height`) VALUES (':code',':height')" 
    Mein Arrray um die Placeholder (nennt man die so?) zu ersetzen sieht so aus:
    PHP-Code:
    $values= array(":code"    => 12345,
                   
    ":height" => 250); 
    Wenn ich, wie oben im String gezeigt, Singlequotes verwende werden die Placeholder nicht ersetzt und es kommt der Fehlercode 42000 bei errorInfo()
    schreibe ich es so:
    PHP-Code:
    (":code",":height"
    mit DoubleQuotes steht dann nach $PDO->prepare(); ("'12345'","'250'") da.

    Das Query kann man dann auch in PHPMyAdmin ausführen, aber ich habe dort dann '12345' drin stehen, also ungewünschte Quotes und die PHP Seite selber wirft wieder 42000 aus, obwohl das Query stimmt.

    Jemand eine Idee?


  • #2
    Platzhalter Quotet man nicht.
    Zitat von nikosch
    Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

    Kommentar


    • #3
      Wenn ich sie gar nicht quote werden sie auch nicht ersetzt.
      Ist mein Array richtig aufgebaut?

      Kommentar


      • #4
        Zeig bitte mal den ganzen Code des Queries und wie du die Platzhalter ersetzt
        Lerne Grundlagen | Schreibe gute Beispiele | PDO > mysqli > mysql | Versuch nicht, das Rad neu zu erfinden | Warum $foo[bar] böse ist | SQL Injections | Hashes sind keine Verschlüsselungen! | Dein E-Mail Regex ist falsch

        Kommentar


        • #5
          Ok habe den Fehler gefunden.
          beim Erstellen des Qerys hatte ich davor und danach " gesetzt.
          Das war der Fehgler x).

          Falsch:
          PHP-Code:
          $this->setQuery('"'.$this->getInsert().$this->getNamespaces().'"'); 
          Richtig:
          PHP-Code:
          $this->setQuery($this->getInsert().$this->getNamespaces()); 

          Kommentar


          • #6
            Nur am Rande: PDO ist nicht neu, laut Wikipedia seit 2004 dabei. Es ist also lobenswert, dass du dich damit beschäftigst, wurde nach zehn Jahren aber auch allerhöchste Zeit

            Ja Besserwisserei macht Spaß

            Kommentar


            • #7
              Das stimmt auf jeden Fall.
              Sagen wirs so.
              Ich mach PHP jetzt seit ca. einem 3/4 Jahr und damit ist PDO, relativ für mich gesehen, "neu".

              Und du willst gar nicht wissen wieviele Menschen noch mysql_connect() verwenden
              eieiei

              Kommentar


              • #8
                Ah ok so war das gemeint, ich hatte es eher so verstanden, dass du schon seit Jahren dabei bist.

                Ja leider habe ich das Gefühl, dass Neueinsteigern oft erst mal mysql an die Birne geknallt wird. Das Resultat sieht man hier tagtäglich: mysql statt mysqli oder PDO kommt andauernd vor.

                Kommentar


                • #9
                  Nur, weil sie nicht auf das Datum der Bücher und der Tutorials achten... Wenn du gute und aktuelle Tutorials liest (siehe Signatur), wird sowas nicht passieren.
                  Lerne Grundlagen | Schreibe gute Beispiele | PDO > mysqli > mysql | Versuch nicht, das Rad neu zu erfinden | Warum $foo[bar] böse ist | SQL Injections | Hashes sind keine Verschlüsselungen! | Dein E-Mail Regex ist falsch

                  Kommentar


                  • #10
                    Ich wusste mehr oder weniger von Anfang an, dass es PDO gibt. Leider konnte ich gerade mal so prozedualen Code lesen und verstehen und konnte einfach nicht nachvollziehen was PDO macht.
                    Das ist vielleicht auch der Punkt warum so viele anfangs noch mit mysql_connect arbeiten.

                    Wann genau wird mysql und mysqli eigentlich nicht mehr funktionieren oder ist es sogar schon so weit? Hatte mal irgengwo gelesen, dass ab sql3.x das nicht mehr benutzt weren kann.

                    Kommentar


                    • #11
                      Zitat von Peytra Beitrag anzeigen
                      Ich wusste mehr oder weniger von Anfang an, dass es PDO gibt. Leider konnte ich gerade mal so prozedualen Code lesen und verstehen und konnte einfach nicht nachvollziehen was PDO macht.
                      Das ist vielleicht auch der Punkt warum so viele anfangs noch mit mysql_connect arbeiten.
                      Ich weiß zwar nicht, wie ein Anfänger darüber denkt, aber meiner Meinung nach arbeitet es sich mit
                      PHP-Code:
                      $obj = new Whatever();
                      $obj->doThis();
                      $obj->doMore(); 
                      viel angenehmer als mit
                      PHP-Code:
                      $handle create_handle();
                      doThis($handle);
                      doMore($handle); 
                      Zitat von Peytra Beitrag anzeigen
                      Wann genau wird mysql und mysqli eigentlich nicht mehr funktionieren oder ist es sogar schon so weit? Hatte mal irgengwo gelesen, dass ab sql3.x das nicht mehr benutzt weren kann.
                      mysql_ ist seit PHP5.5 als Deprecated markiert (wobei sie schon weitaus früher veraltet war) und wird "Demnächst™" entfernt. Das wird vermutlich spätestens bei PHP 6 der fall sein.

                      mysqli_ ist nicht deprecated und es gibt auch noch keine Informationen darüber, dass das in Zukunft so sein soll.
                      Die Offizielle PHP-Dokumentation verweist neben PDO auch auf MySQLi als Alternative, also wird MySQLi wohl noch nicht sobald als deprecated markiert, geschweige denn entfernt.
                      http://php.net/manual/en/function.mysql-connect.php
                      Zitat von nikosch
                      Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

                      Kommentar


                      • #12
                        PHP-Code:
                        $sql_obj = New sql_object(1);

                            
                        $values= array(":code"    => $code,
                                                 
                        ":height"  => $height,
                                                 
                        ":width"   => $width
                            
                        );

                            
                        $sql_obj->insert_into('canvas_img');
                            
                        $sql_obj->values($values);
                            
                        $sql_obj->query_insert(); 
                        Meinst du so ?

                        Kommentar


                        • #13
                          Zitat von Peytra Beitrag anzeigen
                          Meinst du so ?
                          Das wäre schon "etwas mehr" OOP als nur PDO, das was du da beschreibst nennt sich QueryBuilder.

                          Hier mal ein Beispiel vom Doctrine-QueryBuilder:
                          http://doctrine-orm.readthedocs.org/...el-api-methods
                          Zitat von nikosch
                          Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

                          Kommentar


                          • #14
                            Gibt es große Performanceunterschiede in den verschiedenen Schreibweisen?

                            Kommentar


                            • #15
                              Wenn du Mico-Optimisieren willst solltest du es nicht nutzen, allerdings trägt es doch erheblich zur Lesbarkeit bei.
                              Zitat von nikosch
                              Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

                              Kommentar

                              Lädt...
                              X