MySQL "LIKE" - will nicht kooperieren

aphaean

Mitglied
Ich möchte eine Datenbank Abfrage gestalten (Textumbrüche zwecks Lesbarkeit hier eingfügt):

Code:
SELECT DATE_FORMAT(`day`, '%d.%m.%Y') AS `day_form`, 
category, type, heading, text, email FROM $tabellenname WHERE publish=1 
&& type=$_GET[category] && type=$_GET[type] 
&& DATE_SUB(CURDATE(),INTERVAL $_GET[day] DAY)<day 
&& ( heading LIKE '$_GET[suche]' OR text LIKE '$_GET[suche]' ) ORDER BY day DESC

Wörtlich, möchte ich dass die Abfrage mir ein formatiertes Datum, Kategorie, Typ, Überschrift, Text und Email aus der Tabelle $tabellenname, wobei folgendes gleichzeitig gilt:

1. publish = 1
2. Typ stimmt mit einem variablen Typ überein
3. Datum ist kleiner als das momentane, verringert um einen variablen Wert
4. und ein String in entweder Überschrift oder Text vorhanden ist.

Die Punkte 1-3 stellen kein Problem dar. Der Code funktionierte, bis ich folgendes Schnipsel einfügte:

Code:
&& ( heading LIKE '$_GET[suche]' OR text LIKE '$_GET[suche]' )

Daraufhin folgt diese Fehlermeldung:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in [...] on line 59

Was mache ich falsch?

in line 59 beginnt übrigens die Ausgabe der gewonnen Daten (bzw umwandlung in ein Array):

PHP:
for ($i=0; $i<mysql_num_rows($result); $i++)
 {
$ergebnis[$i] = mysql_fetch_array($result);
 }

Daran kann es aber nicht liegen. Bis obiger Code eingefügt wurde, funktionierte das ganze einwandfrei. Erfahrungsgemäß wurde auch immer Zeile 59 zitiert, wenn irgendetwas an der Abfrage zu meckern war.

*extremverzweifeltguck*

Wäre um jeglichen Feedback ausgesprochen dankbar ...

cheerio,
anna
 
Probier mal Folgendes:
PHP:
$query = '
	SELECT
	        DATE_FORMAT(`day`, "%d.%m.%Y") AS `day_form`,
	        `category`,
	        `type`,
	        `heading`,
	        `text`,
	        `email`
	  FROM
	        `'.$tabellenname.'`
	  WHERE
	        `publish` = 1
	    AND `type`    = "'.mysql_real_escape_string($_GET['category']).'"
	    AND `type`    = "'.mysql_real_escape_string($_GET['type']).'"
	    AND DATE_SUB(CURDATE(), INTERVAL '.intval($_GET['day']).' DAY) < `day`
	    AND (
	              `heading` LIKE "'.mysql_real_escape_string($_GET['suche']).'"
	          OR  `text`    LIKE "'.mysql_real_escape_string($_GET['suche']).'"
	        )
	  ORDER BY
	        `day` DESC
	';
 
Zurück