Ankündigung

Einklappen
Keine Ankündigung bisher.

php mysqli PREPARE?

Einklappen

Neue Werbung 2019

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

  • php mysqli PREPARE?

    Hallo Jungs,

    Ich habe gerade eine Denkblockade.. :{

    Ich möchte dieses Mysqli Statement in ein Mysqli prepared Statement umwandeln, es sei scheinbar sicherer.. ^^

    Nun, einfache Statements konnte ich schon umwandeln, aber hier kommt es mir etwas komplizierter vor, wegen dem SELECT im SELECT.

    Kann mich hier bitte jemand Unterstützen? Was muss ich beachten?

    Danke für jede Hilfe...

    PHP-Code:
    $select $mysqli->query("
    SELECT user.id, 
           DATE_ADD(
               userstatus.aktiviertam, INTERVAL (
                   produkte.kostenlos_tage - (
                       SELECT tage_abovertragsemail1_vor_testablauf FROM time_rules WHERE time_rules.id = 1
                   )
               )DAY
           ) AS datesendemailallowed
    FROM user
    LEFT JOIN userstatus ON user.id = userstatus.id_user
    LEFT JOIN abo ON user.id = abo.id_user
    LEFT JOIN produkte ON abo.id_produkt = produkte.id
    WHERE produkte.produkt = 'dienstleister' 
        AND CURDATE() <= 'datesendemailallowed' 
        AND abo.abo_bestaetigt_am IS NULL 
        AND abo.abovertragsemail1_gesendet_am IS NULL
    "
    ); 
    Gruss

  • #2
    MySQLi->prepare() ist es egal, wie wieviele Selects bzw. Subselects usw. Du hast, er prepared den String, den Du ihm übergibst!
    Competence-Center -> Enjoy the Informatrix
    PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

    Kommentar


    • #3
      Du ersetzt query gegen perpare und hängst hinten noch ein ->get_result(); dran.
      Macht zwar in dem Fall überhaupt kein sinn, aber wenn "es sei scheinbar sicherer" ist dann bitte. Vielleicht solltest du solche Aussagen vielleicht erstmal hinterfragen oder verstehen warum, bevor du anfängst irgendwelche Dinge umzubauen.

      Kommentar


      • #4
        Vielleicht solltest du solche Aussagen vielleicht erstmal hinterfragen oder verstehen warum, bevor du anfängst irgendwelche Dinge umzubauen.
        santana2000, hiermit kannst beginnen - Lesestoff:

        http://php-de.github.io/jumpto/sql-injection/, insbesondere der auch im ersten verlinkte http://php-de.github.io/jumpto/kontextwechsel/

        LG
        The string "()()" is not palindrom but the String "())(" is.

        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
        PHP.de Wissenssammlung | Kein Support per PN

        Kommentar


        • #5
          Zitat von erc Beitrag anzeigen
          Macht zwar in dem Fall überhaupt kein sinn, aber wenn "es sei scheinbar sicherer" ist dann bitte. Vielleicht solltest du solche Aussagen vielleicht erstmal hinterfragen oder verstehen warum, bevor du anfängst irgendwelche Dinge umzubauen.
          Das mag so stimmen, aber in anderen Situationen, zb. inserts aus Formularen macht es durchaus sinn. Soll ich prepared nur dort anwenden wo es sinn macht, oder macht es sinn, möglichst homogen zu scripten und alle statements gleich zu gestalten?

          Wie macht ihr das bei euch?

          Kommentar


          • #6
            Naja, für sowas habe ich Controller, die grundsätzlich jede Query über PreparedStatements abbilden, das werden vermutlich andere auch so machen...
            Competence-Center -> Enjoy the Informatrix
            PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

            Kommentar


            • #7
              Zitat von Arne Drews Beitrag anzeigen
              Naja, für sowas habe ich Controller, die grundsätzlich jede Query über PreparedStatements abbilden, das werden vermutlich andere auch so machen...
              Was meinst du mit Controller..?

              Andere machen das vermutlich auch so.. und ich höre das erste Mal davon? (das ist natürlich eine rhetorische Frage)

              Das will ich genauer wissen bitte!

              Kommentar


              • #8
                Naja, ich nutze als Schnittstelle zur DB PDO.
                Das allein bietet ja schon PreparedStatements usw., das muß ich nicht neu erfinden. Mit Controller meine ich einfach nur einen Wrapper der bei mir eben auf PDO basiert:
                PHP-Code:
                // Praxis untaugliches Beispiel nur zur kurzen Erläuterung!

                class DatabaseController extends PDO {

                    public function 
                __construct$aParams=null ) {

                        if ( !
                is_null($aParams) ) {

                            
                parent::__construct(
                                    
                $aParams->ConnectionString,
                                    
                $aParams->UserName,
                                    
                $aParams->UserPassword,
                                    
                $aParams->InitCommands
                                
                );

                        }

                    }


                So habe ich bspw. die Möglichkeit auch mal einen anderen DB-Treiber zu verwenden, ohne im allgemeingültigen Code etwas anpassen zu müssen.
                Die Verbindungsparameter kommen bei mir dann aus einer Config, bspw.:
                PHP-Code:
                $DatabaseCtrl = new DatabaseControllerConfig::get('Database') ); 
                Also im Prinzip nur ein Wrapper für PDO, nichts weltbewegendes!
                Die Queries gehen allerdings ausnahmslos über die PreparedStatements bei mir, das wollte ich eigentlich damit sagen.

                Der eine machts so, der andere so, aber ich denke die meisten hier machen es zumindest vom Prinzip her ähnlich...
                Competence-Center -> Enjoy the Informatrix
                PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                Kommentar


                • #9
                  Prepared Statements machen übrigens dann auch richtig sinn, wenn man sie für das verwendet, wofür sie da sind: Prepared Statements. Hier ein realitätsfernes Konzept-Beispiel:

                  PHP-Code:
                  class Persons {
                      
                  /**
                       * @param PDO $pdo
                       */
                      
                  public function __construct(PDO $pdo) {
                          
                  $this->select $pdo->prepare('SELECT some, fancys, fields FROM table WHERE id=:id');
                      }
                      
                      
                  /**
                       * @param int $id
                       * @return array
                       */
                      
                  public function get($id) {
                          
                  $this->select->execute(['id' => $id]);
                          
                  $result $this->select->fetch(PDO::FETCH_ASSOC);
                          
                  $this->select->closeCursor();
                          return 
                  $result;
                      }

                  Kommentar

                  Lädt...
                  X