Antworten auf deine Fragen:
Neues Thema erstellen

Fehlermeldung: Warning...expects...to be resource

Ben78

Nicht mehr ganz neu hier

Hi Leutz,

ich habe folgende Query...
PHP:
$suchwort_array = explode(" ", $suchwort); 

$query = 'SELECT DISTINCT * FROM Tabelle WHERE '; 

for($i=0; $i < count($suchwort_array); $i++) 
{ 
$query .= "(MATCH (Title,ShortDescription,LongDescription,Category,Brand) AGAINST('%" . mysql_real_escape_string($suchwort_array[$i]) . "%') AND Brand LIKE '%" . mysql_real_escape_string($brand) . "%')"; 

if($i<count($suchwort_array)-1)
{
$query .= ' and ';  
}
}
$result = mysql_query($query);

...zu folgende Query umgewandelt, also per IF-Bedingung zerteilt und aus dem LIKE ein = gemacht:
PHP:
$suchwort_array = explode(" ", $suchwort); 

$query = 'SELECT DISTINCT * FROM Tabelle WHERE '; 

for($i=0; $i < count($suchwort_array); $i++) 
{ 
$query .= "MATCH (Title,ShortDescription,LongDescription,Category,Brand) AGAINST('%" . mysql_real_escape_string($suchwort_array[$i]) . "%')"; 

if($i<count($suchwort_array)-1)
{
$query .= ' and ';  
}
}
if ($brand)
{
if ($suchwort) $query .= " AND";
$query .= " Brand = '" . mysql_real_escape_string($brand) . "'";
}
$result = mysql_query($query);
Die Suche und die Ergebnisse funktioniert bzw. passen alle einwandfrei. Blos erhalte ich seit der neuen Query permanent folgende Fehlermeldung, wenn ich ausschließlich das Feld Brand für die Suche benutze. Die Ergebnisse zeigt er mir jedoch richtig an:
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /Applications/XAMPP/xamppfiles/htdocs/search.html on line 127

Zeile 127 sieht so aus: $anzahl = mysql_num_rows($result);

Es wird sich mit Sicherheit um eine Klammer zu viel oder zu wenig handeln. Ich habe jetzt ca. 2 Stunden damit verbracht die Blöde Meldung zu bereinigen...allerdings ohne Erfolg, wie man sieht. Ich Bitte um Eure Hilfe, woran das liegen könnte.
...Und so sieht mein ECHO aus: SELECT DISTINCT * FROM Tabelle WHERE Brand = 'adidas' LIMIT 0,10
 
Zuletzt bearbeitet:

Duddle

Posting-Frequenz: 14µHz

AW: Fehlermeldung: Warning...expects...to be resource

"Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /Applications/XAMPP/xamppfiles/htdocs/search.html on line 127"
Du übergibst also einen boolschen Wert. Wo wird $result zuletzt gefüllt? Wahrscheinlich (du hast ja nicht den relevanten Kontext gepostet) durch ein mysql_query().

sagt, der Rückgabewert wird (bei einem SELECT) genau dann false (also ein boolscher Wert), wenn es einen Fehler gab: "For SELECT, SHOW, DESCRIBE, EXPLAIN and other statements returning resultset, mysql_query() returns a resource on success, or FALSE on error."
Das heißt, deine Abfrage enthält einen Fehler. Den kannst du dir direkt nach dem mysql_query() mit anzeigen lassen.


Duddle
 
Zuletzt bearbeitet:

Ben78

Nicht mehr ganz neu hier

AW: Fehlermeldung: Warning...expects...to be resource

Also das gesamte Skript sieht so aus:
PHP:
$suchwort_array = explode(" ", $suchwort); 

$query = 'SELECT DISTINCT * FROM Tabelle WHERE '; 

for($i=0; $i < count($suchwort_array); $i++) 
{
$query .= "MATCH (Title,ShortDescription,LongDescription,Category,Brand) AGAINST('%" . mysql_real_escape_string($suchwort_array[$i]) . "%')"; 

if($i<count($suchwort_array)-1)
{
$query .= ' and ';  
}
}
if ($brand)
{
if ($suchwort) $query .= " AND";
$query .= " Brand = '" . mysql_real_escape_string($brand) . "'";
}
$result = mysql_query($query);

//-----------------------------------FALLUNTERSCHEIDUNG QUERY-----------------------------------------------FALLUNTERSCHEIDUNG QUERY----------------

$anzahl = mysql_num_rows($result);


if ($anzahl ==0)
{
$query = "SELECT DISTINCT * FROM Tabelle WHERE";

if ($suchwort) $query .= " MATCH (Title,ShortDescription,Brand,LongDescription,Category)
AGAINST('%" . mysql_real_escape_string($suchwort) . "%')";

if ($brand)
{
if ($suchwort) $query .= "AND";
$query .= " Brand = '" . mysql_real_escape_string($brand) . "'";
}

// if sucheingabe
$result = mysql_query($query) or die(mysql_error(). ' > '.$query);
if ( ! $result )

{
die('Ung&uuml;ltige Abfrage: ' . mysql_error());
}
}

echo $query;

Es geht um den oberen Teil vor der Fallunterscheidung. Trotz mysql_error kann ich den Fehler nicht finden, sofern mysql_error an richtiger Stelle steht?!?!?
 

Duddle

Posting-Frequenz: 14µHz

AW: Fehlermeldung: Warning...expects...to be resource

Da mysql_num_rows() den Fehler meldet, musst du offensichtlich die letzte mysql_query vor der Fehlerzeile nehmen. Also genau dort, wo jetzt der Kommentar "//-----------------------------------FALLUNTERSCHEIDUNG QUERY----... " steht.

Übrigens reicht ein
PHP:
$result = mysql_query($query) or die(mysql_error(). ' > '.$query);
vollkommen aus, das if danach ist nur redundant;


Duddle

Duddle
 

Ben78

Nicht mehr ganz neu hier

AW: Fehlermeldung: Warning...expects...to be resource

Übrigens reicht ein
PHP-Code:
$result = mysql_query($query) or die(mysql_error(). ' > '.$query);
vollkommen aus, das if danach ist nur redundant;
THX 4 that...hab ich gleich umgesetzt!

Da mysql_num_rows() den Fehler meldet, musst du offensichtlich die letzte mysql_query vor der Fehlerzeile nehmen. Also genau dort, wo jetzt der Kommentar "//-----------------------------------FALLUNTERSCHEIDUNG QUERY----... " steht.
...und auch THX 4 that...hat mir gezeigt wo der Fehler liegt.
blablabla...Syntaxfehler... to use near 'Brand = 'adidas'' at line 1

Liegt wohl offenkundig an den Gänsefüschen. Habe mehrere Kombis probiert...aber leider ohne Erfolg. Hast Du vlt. ne Idee wo hier ein Gänsefüschen falsch liegt...ich komme absolut nicht drauf?!?
PHP:
$query .= " Brand = '" . mysql_real_escape_string($brand) . "'";
 

Duddle

Posting-Frequenz: 14µHz

AW: Fehlermeldung: Warning...expects...to be resource

Nein, die Gänsefüßchen sind richtig. Strings werden in SQL so weit ich weiß immer mit dem einfachen Anführungszeichen ' angezeigt (vielleicht bist du etwas verwirrt und denkst, hinten bei der Fehlermeldung stehe ein ", aber das sind tatsächlich zwei einzelne ').

Die Antwort zu deinem Fehler kenne ich nicht. Aus Erfahrung kann ich aber sagen, dass es immer geholfen hat, Namen (von Tabellen, Spalten) immer in `` einzuschliessen. Also konkret:
PHP:
 $query .= " `Brand` = '" . mysql_real_escape_string($brand) . "'";
Probier das mal, ansonsten weiß ich es nicht.


Duddle
 

Ben78

Nicht mehr ganz neu hier

AW: Fehlermeldung: Warning...expects...to be resource

@Duddle
VERY BIG THX 4 HLP!!!

ich habe mal Versuchsweise das ECHO gleich vor mysql_query ausgeben lassen. Dabei kam das hier raus:
SELECT DISTINCT * FROM Tabelle WHERE MATCH (Title,ShortDescription,LongDescription,Category,Brand) AGAINST('%%') Brand = 'Adidas'

Also MATCH (Title,ShortDescription,...) AGAINST('%%') war To much.

Fazit: Ich habe an folgender Stelle vor $query die Bedingung vergessen: if ($suchwort)
PHP:
$query .= "MATCH (Title,ShortDescription,LongDescription,Category,Brand) AGAINST('%" . mysql_real_escape_string($suchwort_array[$i]) . "%')";
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Keine Mitglieder online.

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben