Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] mySQLi LIKE + bind_param = Problem

Einklappen

Neue Werbung 2019

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

  • #16
    Zitat von Gianna Beitrag anzeigen
    (? IN BOOLEAN MODE) ist bestimmt PDO... ich möchte aber schon bei mySQLi bleiben, also wohin mit ('%', ?, '%')
    "in boolean mode" ist nicht PDO oder mysqli oder sonstwas sondern einfach teil der (my)SQL-syntax bei match against.
    was es bedeutet und wie du match against nutzt ließt du am besten in der doku nach
    http://dev.mysql.com/doc/refman/5.1/...xt-search.html
    nicht nur die beispiele anschauen.

    edit:
    Zitat von eagle275 Beitrag anzeigen
    2) wenn mysqli nicht will, würd ich als erstes PDO probieren
    oder mysql- und mysqli-doku lesen.
    sonst gibt es die selben probleme auch mit PDO.
    wüsste nicht, dass mysqli sich einfach verweigert, wenn man alles richtig macht.

    edit2: das ursprungsproblem der TE würde z.b. so auch genauso in PDO auftreten. nutzt man mehr als einen parameter im query muss man natürlich auch alle parameter binden. und '%?%' im query wird auch bei PDO zu einer fehlermeldung führen.
    Code:
    SELECT
        `id`,
        `news`,
        `titel`  
    FROM
        `artikel`
    WHERE
        `news` LIKE ? OR
        `title` LIKE ?
    ORDER BY
        `id`
    DESC
    die übergabe der parameter in php muss dann z.b. so aussehen:
    PHP-Code:
    $param='%suchwort%';
    $mysqliStmt -> bind_param('ss'$param$param); 
    oder für pdo z.b. so
    PHP-Code:
    $param='%suchwort%';
    $pdoStmt->bindParam(1,$param);
    $pdoStmt->bindParam(2,$param); 
    liebe Grüße
    Fräulein Dingsda

    Kommentar


    • #17
      hallo dingsda

      vielen dank für deine Mühe, soweit habe ich es verstanden, nur jetzt stehe ich wieder vor dem Problem die Zeile fehlerfrei zusammen zu setzten.

      Denn, wo bzw. wie bringe ich das hier unter ?
      Code:
      // $suchwort = $_POST['suchwort'];
      
      $wort = '%suchwort%';
      Wenn ich weiterhin das habe:
      Code:
      WHERE 
      `news` LIKE CONCAT('%', ?, '%') 
      OR 
      `title` LIKE CONCAT('%', ?, '%')
      
      // $stmt->bind_param('ss', $wort, $wort);
      ??

      Kommentar


      • #18
        in PHP ist das zusammensetzen von Strings noch einfacher als in (my)sql

        PHP-Code:
        $param '%'.$_POST['suchwort'].'%';
        $mysqliStmt -> bind_param('ss'$param$param); 
        entsprechend brauchst du deine Concat-Ausdrücke nicht (mehr), sondern kannst es einfach schreiben wie dingsda dir rät
        "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste [IMG]http://www.php.de/core/images/smilies/icon_lol.gif[/IMG]

        Kommentar


        • #19
          tädäää... es funktioniert auch dir nochmal danke das du mir den Teil vorkauen musstest, vielen Dank

          Wenn ich jetzt ein echo auf $suchwort mache, sind da die % vor und dahinter:
          Code:
          // suche z.b. nach module
          %module%
          escapen ?

          Kommentar


          • #20
            macht das prepared Statement beim Einsatz von bind_param("s",...) automagisch- passend zum Datentyp - s-> String .. also wird für Strings escaped, bei Zahlenparametern läuft das analog
            "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste [IMG]http://www.php.de/core/images/smilies/icon_lol.gif[/IMG]

            Kommentar


            • #21
              hi,

              ich frage vorsichtshalber nochmal

              Muss ich die beiden % jetzt echt mit preg_replace entfernen (Best Practice ?) oder gibt es da eine "Sauberere" Lösung

              Kommentar


              • #22


                Wo hast Du die denn stehen?
                Competence-Center -> Enjoy the Informatrix
                PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                Kommentar


                • #23
                  hi Arne,

                  in $suchwort
                  PHP-Code:
                  echo '<b>'.$stmt->num_rows.' Treffer mit '.$suchwort.'</b>'
                  Mal angenommen ich habe nach Module gesucht, dann sieht meine Ausgabe so aus:

                  5 Treffer mit %Module%

                  Die % könnte ich ja jetzt mit Reguläre Ausdrücke entfernen, aber ob das nötig ist ist ??

                  Kommentar


                  • #24
                    wie wärs mit sowas in der art:

                    PHP-Code:

                    $stmt 
                    $mysqli->prepare (...);

                    $suchwort '%' $_GET['suche'] . '%';

                    $stmt ->bind_param('s'$suchwort);

                    echo 
                    htmlspecialchars($_GET['suche']); 
                    liebe Grüße
                    Fräulein Dingsda

                    Kommentar


                    • #25
                      htmlspecialchars ohne funktion

                      keine Änderung, aber jetzt wo du htmlspecialchars erwähnst, die bleibt komischerweise bei der Ausgabe ohne Funktion, was ist denn da nu wieder los

                      Kommentar


                      • #26
                        halt stop, dingsda, du hast recht

                        $_POST['suchwort'], nicht $suchwort

                        Kommentar


                        • #27
                          Zitat von Gianna Beitrag anzeigen
                          aber jetzt wo du htmlspecialchars erwähnst, die bleibt komischerweise bei der Ausgabe ohne Funktion, was ist denn da nu wieder los
                          was heißt denn "ohne funktion"?
                          liebe Grüße
                          Fräulein Dingsda

                          Kommentar


                          • #28
                            Zitat von dingsda Beitrag anzeigen
                            was heißt denn "ohne funktion"?
                            naja, er wandelt trotz htmlspecialchars HTML um, was ja nicht soll.

                            Auch wenn ich nur ein paar Leerzeichen eintippe, sind die % wieder da.

                            gruß Gianna

                            Kommentar


                            • #29
                              oh man, sorry mein Fehler, es funktioniert so wie es soll.

                              Ich brauche htmlspecialchars an zwei stellen und bei "Keine Treffer für xxx" habe ich es vergessen.

                              lieben dank nochmal dingsda

                              Kommentar

                              Lädt...
                              X