sql_build_array mit LIKE

In diesem Forum kann man Fragen zur Programmierung stellen, die bei der Entwicklung von Mods für phpBB 3.0.x oder dem Modifizieren des eigenen Forums auftauchen.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
Benutzeravatar
Unimatrix_0
Mitglied
Beiträge: 392
Registriert: 03.11.2007 10:50
Kontaktdaten:

sql_build_array mit LIKE

Beitrag von Unimatrix_0 »

Hi,

ich bastel gerade an der Neuschreibung meiner phpBB-Erweiterung und wollte gerade mit sql_build_array ein Datenbankquery erstellen, habe aber folgendes Problem:

Wenn $_POST["ex_..."] gesetzt ist, soll der exate Terminus gesucht werden, wenn nicht das ganze mit LIKE aus mein MySQL-Datenbank gesucht werden und dafür verwende ich folgenden Code:

Code: Alles auswählen

    if ((isset ($_POST["ex_nick"])) AND ($search_name <> ''))
    $data['username'] = $db->sql_escape($search_name);

    if ((!isset ($_POST["ex_nick"])) AND ($search_name <> ''))
    $data['username'] = $db->sql_like_expression($db->sql_escape($search_name));

//noch mehr solcher Konstukte
    $data['del'] = 'false';

    $sql = 'SELECT *
    FROM ' . KB_TABLE . '
    WHERE ' . $db->sql_build_array('SELECT', $data);
 
nur leider sieht die Anweisung dann zB wie folgt aus:

Code: Alles auswählen

SELECT *
    FROM phpbb_kb
    WHERE username = 'LIKE \Name\'' AND del = 'false' 
gibt es eine Möglichkeit das ganze richtig über sql_build_array laufen zu lassen und auch ein funktionierende Abfrage zu erhalten oder muss ich die Datenbankanweisung wie auf http://phpbbmodders.net/articles/3.0/dbal/ gezeigt mit sql_like_expression "händisch" zusammenbauen?

LG & Dank im vorraus Un1
Benutzeravatar
tas2580
Ehemaliges Teammitglied
Beiträge: 3029
Registriert: 01.07.2004 05:42
Wohnort: /home/tas2580
Kontaktdaten:

Re: sql_build_array mit LIKE

Beitrag von tas2580 »

Wenn du $db->sql_build_array verwendest brauchst du kein $db->sql_escape.

Gruß Tobi
Heute ist ein guter Tag um dein Forum zu testen.
Ehemaliger Benutzername: [BTK] Tobi
Benutzeravatar
Unimatrix_0
Mitglied
Beiträge: 392
Registriert: 03.11.2007 10:50
Kontaktdaten:

Re: sql_build_array mit LIKE

Beitrag von Unimatrix_0 »

Danke für den Hinweis, werd ich mir zu Herzen nehmen :grin:

damit das ganze klappt habe ich erstmal ein Notkonstruct gewählt:

Code: Alles auswählen

    //Datenbankabfragenvarriablen initiieren
    $data = array();
    $sql1 = '';
    $sql2 = '';
    $sql3 = '';
    
    
    if ((isset ($_POST["ex_nick"])) AND ($search_name <> ''))
    $data['username'] = $search_name;

    if ((!isset ($_POST["ex_nick"])) AND ($search_name <> ''))
    $sql1 = ' AND username LIKE "%'.$db->sql_escape($search_name).'%"';
    
    if ((isset ($_POST["ex_ally"])) AND ($search_ally <> ''))
    $data['userally'] = $search_ally;
    
    if ((!isset ($_POST["ex_ally"])) AND ($search_ally <> ''))
    $sql2 = ' AND userally LIKE "%'.$db->sql_escape($search_ally).'%"';

    if ((isset ($_POST["ex_titel"])) AND ($search_titel <> ''))
    $data['titel'] = $search_titel;
    
    if ((!isset ($_POST["ex_titel"])) AND ($search_titel <> ''))
    $sql3 = ' AND titel  LIKE "%'.$db->sql_escape($search_titel).'%"';
    
    $data['del'] = 'false';
    
    if (isset ($_POST["public"]))
    $data['password'] = '';
    
    $sql = 'SELECT *
    FROM ' . KB_TABLE . '
    WHERE ' . $db->sql_build_array('SELECT', $data) . $sql1 . $sql2 . $sql3; 
Falls es (besonders für den Teil mit dem LIKE) da eine geschicketere Lösung gibt, ich bin offen für Veränderungen :)

LG Un1
Benutzeravatar
nickvergessen
Ehrenadmin
Beiträge: 11559
Registriert: 09.10.2006 21:56
Wohnort: Stuttgart, Germany
Kontaktdaten:

Re: sql_build_array mit LIKE

Beitrag von nickvergessen »

$db->sql_like_expression() wäre die Lösung ;)

Hier gibt's so ne kleine Übersicht: http://phpbbmodders.net/articles/3.0/dbal/
Wenn man das dann genauer wissen will, hilft manchmal ein Blick in die includes/db/dbal.php und includes/db/*deine-datenbank*.php
kein Support per PN
Benutzeravatar
Unimatrix_0
Mitglied
Beiträge: 392
Registriert: 03.11.2007 10:50
Kontaktdaten:

Re: sql_build_array mit LIKE

Beitrag von Unimatrix_0 »

Hallo nv,

danke für den Hinweis, jedoch komm ich mit $db->sql_like_expression() leider nicht zum Ziel, da ich es im Ursprung versucht habe mit $db->sql_build_array zu komibineren (und es immernoch gern würde, falls möglich), den

Code: Alles auswählen

    //Datenbankabfragenvarriablen initiieren
    $data = array();    $sql1 = '';
    $sql2 = '';
    $sql3 = '';
    
    
    if ((isset ($_POST["ex_nick"])) AND ($search_name <> ''))
    $data['username'] = $search_name;

    if ((!isset ($_POST["ex_nick"])) AND ($search_name <> ''))
    $sql1 = ' AND username ' . $db->sql_like_expression($db->any_char . $search_name . $db->any_char);
    
// fast der selbe Spaß, nur andere Varriablen
    
    $data['del'] = 'false';
    
    if (isset ($_POST["public"]))
    $data['password'] = '';
    
    $sql = 'SELECT *
    FROM ' . KB_TABLE . '
    WHERE ' . $db->sql_build_array('SELECT', $data) . $sql1 . $sql2 . $sql3; 
ist immernoch "umständich und nicht schön"

LG Un1
Antworten

Zurück zu „[3.0.x] Mod Bastelstube“