zusammengesetzte query -> Denkfehler

sipoh

Erfahrenes Mitglied
Hallo,

ich bastel gerade an einem kleinen Suchscript. Die query dafür wird in einer for-schleife zusammengebaut. Bei einem Wort klappt das, allerdings nicht bei mehreren (z.B. eine insel) Da gibt mir die query folgendes aus:

Code:
select * from myblog where tags like '%eine%' and tags like '%ff%' or text like '%eine%' and like '%ff%'

Der Fehler:

Code:
mysql_num_rows(): supplied argument is not a valid MySQL result resource


.. und das Script:

Code:
..
 $eingabe_array = explode(' ',$eingabe);

    // Hauptquery
    $query = 'select * from myblog where '; //anfang der abfrage
    
    // Suchstring Tags
    for($i=0; $i<count($eingabe_array); $i++){
        $query .= "tags like '%".$eingabe_array[$i]."%'";
            //ob der $i-te begriff in einer der drei spalten enthalten ist (mit oder verknüpft)
        if($i<count($eingabe_array)-1){
            $query .= ' and ';
        }
    }
    // --->

    // Suchstring Text
    $query .= ' or text';
    for($i=0; $i<count($eingabe_array); $i++){
        $query .= " like '%".$eingabe_array[$i]."%'";
            //ob der $i-te begriff in einer der drei spalten enthalten ist (mit oder verknüpft)
        if($i<count($eingabe_array)-1){
            $query .= ' and ';
        }
    }
    // --->
 echo $query;


$result = mysql_query($query); //anfrage an die datenbank

    if(mysql_num_rows($result) < 1) {

..

$eingabe = $_POST['eingabe'] = Suchfeld

Kann mir da vielleicht jemand helfen, Unterstützung liefern?
 
Probier mal Folgendes:
PHP:
$query = 'SELECT * FROM `myblog` WHERE 0 ';
if( count($eingabe_array) ) {
	$eingabe_array = array_map('mysql_real_escape_string', $eingabe_array);
	$query .= ' OR `tags` LIKE "%' . implode('%" AND `tags` LIKE "%', $eingabe_array) . '%"';
	$query .= ' OR `text` LIKE "%' . implode('%" AND `text` LIKE "%', $eingabe_array) . '%"';
}
 
Das funktioniert. Danke.

Ich habe dann mal nachgeschlagen, was mysql_real_escape_string ist.

Dazu habe ich folgendes gefunden:

Code:
Die Funktion muss immer (mit wenigen Ausnahmen) verwendet werden, um Daten abzusichern, bevor sie per Query an MySQL übermittelt werden.

Ist es also im Zeitalter der SQL-Injection ratsam, diese Funktion zu werden? Wie wirkt diese Funktion?
 
Zurück