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

  • [Erledigt] mySQLi LIKE + bind_param = Problem

    hi,

    ich fange mal mit meinem funktionierenden Code an:
    PHP-Code:
    $suchwort $_POST['suchwort']; 

    $stmt $db->prepare("SELECT `id`, `news`, `titel` 
    FROM artikel WHERE news LIKE CONCAT('%', ?, '%') ORDER BY `id` DESC"
    );
    $stmt->bind_param('s'$suchwort);
    $stmt->execute();
    $stmt->store_result();
    $stmt->bind_result($id$news$titel); 
    Jetzt möchte ich auch noch die Zelle "title" für meine Suche berücksichtigen.

    Meine Idee mit: OR title LIKE CONCAT('%', ?, '%') führt zu dem Fehler:
    Code:
    Warning: mysqli_stmt::bind_param() [mysqli-stmt.bind-param]: Number of variables doesn't match number of parameters in prepared statement
    Ich könnte echt mal eure Hilfe gebrauchen

  • #2
    Guten Morgen,

    naja. Die Fehlermeldung sagt ja eigentlich alles. Du hast wenn du "OR title LIKE CONCAT('%', ?, '%')" hinzufügst einen zusätzlichen Parameter in deinem Statement, bindest später aber immer noch nur einen für "SELECT `id`, `news`, `titel`
    FROM artikel WHERE news LIKE CONCAT('%', ?, '%') ORDER BY `id` DESC"
    .

    => Einfach ein zweites mal $stmt->bind_param('s', $suchwort); ausführen.

    Kommentar


    • #3
      hi Rodney,

      vielen Dank für deine Antwort, aber das habe ich auch schon versucht, das Ergebnis ist, das ich die selbe Fehlermeldung gleich 2x erhalte.

      Kommentar


      • #4
        Generell frage ich mich, ob das CONCAT nötig ist?!
        Code:
        SELECT
            `id`,
            `news`,
            `titel`  
        FROM
            `artikel`
        WHERE
            `news` LIKE '%?%' OR
            `title` LIKE '%?%'
        ORDER BY
            `id`
        DESC
        sollte doch eigentlich reichen...

        Und bzgl. Deiner Frage kannst Du mal folgendes probieren:
        PHP-Code:
        $stmt->bind_param('ss'$suchwort$suchwort); 
        Competence-Center -> Enjoy the Informatrix
        PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

        Kommentar


        • #5
          hi Arne,

          auch schon probiert, gibt ne fehlermeldung al´a
          Code:
          Fatal error: Call to a member function bind_param() on a non-object
          und '%?%' mag bind_param so eh nicht

          Kommentar


          • #6
            versuch es statt mit LIKE mal mit MATCH ... AGAINST ... mysql unterstützt Volltext-Suche auch in INNO-DB, wenn es nicht zu alt ist .... dann brauchst du nur 1 Parameter um es gegen beliebig viele Spalten zu prüfen
            "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


            • #7
              Ja, war nicht zu Ende gedacht von mir. %?% kann nicht funktionieren, da bind_param('s', ...) den Wert als String maskiert.
              Aber die Variante von eagle wird eh die bessere sein!
              Competence-Center -> Enjoy the Informatrix
              PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

              Kommentar


              • #8
                hi eagle,

                meinst du das sich mein vorhaben so nicht umsetzen lässt ohne eine Volltext Suche ?

                Kommentar


                • #9
                  1) das ist quasi "das gleiche" wie dein Ansatz nur ein anderer Befehl - LIKE ist nur langsamer
                  2) wenn mysqli nicht will, würd ich als erstes PDO probieren
                  3) lass dich vom Wort "Volltextsuche" nicht verwirren - das funktioniert wunderbar auch bei einzelnen Wörtern oder auch Wort-Teilen
                  "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


                  • #10
                    so, also... ich habe jetzt einige Varianten versucht, irgendwie bekomme ich die Zeile nicht hin, Beispiele aus dem Netz sehen alle unterschiedlich aus
                    PHP-Code:
                    "SELECT * FROM artikel WHERE MATCH (news, title) AGAINST (? IN BOOLEAN MODE) ORDER BY id DESC" 
                    (? IN BOOLEAN MODE) ist bestimmt PDO... ich möchte aber schon bei mySQLi bleiben, also wohin mit ('%', ?, '%')

                    vielen Dank für eure Mühe

                    Kommentar


                    • #11
                      Zitat von eagle275 Beitrag anzeigen
                      3) lass dich vom Wort "Volltextsuche" nicht verwirren - das funktioniert wunderbar auch bei einzelnen Wörtern oder auch Wort-Teilen
                      und was ist mit FULLTEXT KEY auf news und title ?

                      gruß Gianna

                      Kommentar


                      • #12
                        das wäre typisch für MyISAM-Tabellen . Inno-DB kennt es nicht
                        "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


                        • #13
                          meine Tabellen sind MyISAM... ist das nicht mehr "Zeitgemäß" ?

                          Im Netz bzw. in diesem Forum finde ich kein Beispiel für mein vorhaben, befürchte daher, das es nicht vorgesehen ist, zwei Zellen einer Tabelle zu durchsuchen und die dann durch bind_param zu schicken.

                          Oder... ich brauche eine Schleife und damit kenne ich mich mal gar nicht aus

                          gruß Gianna

                          Kommentar


                          • #14
                            Grundlagen lernen. Nicht persönlich nehmen.

                            Kommentar


                            • #15
                              Zitat von Phpyton Beitrag anzeigen
                              Grundlagen lernen. Nicht persönlich nehmen.
                              ne ne, bin direkt auf dem Weg und meine Grundlagen hole ich durch "Learning by Doing" und das sollte vorerst reichen für meine 2-3 Zeiler.

                              So Phpyton, jetzt kannst du den Hilfesuchenden hier im Forum gerne weiterhelfen wenn du zu meinem Beitrag nichts konstruktives beitragen kannst

                              gruß Gianna

                              Kommentar

                              Lädt...
                              X