Abfrage ergebislos

Abfrage ergebislos

am 23.04.2008 10:56:14 von Robert Fall

Hallo

Ich habe eine DB-Abfrage (PHP/MySQL-5.0.51a) die mittels 3 Dropdown-Menüs
insgesamt 4 Tabellen abfrägt soweit hingekriegt, daß keine Fehlermeldung
mehr angezeigt wird. Weder PHP- noch SQL-Errors. Ich bekomme trotzdem keine
Ergebnisse angezeigt. Da ich in MySQL nicht ganz so firm bin, bitte ich euch
mal meine Select-Abfrage zu überprüfen. Vielleicht liegt's am SQL-Code.

SELECT *
FROM festivals as f
INNER JOIN f_categories AS c ON c.id = f.category
INNER JOIN f_countries AS o ON o.id = f.country
INNER JOIN f_months AS m ON m.id = f.month
WHERE f.title LIKE %s
AND c.category LIKE %s
AND o.country LIKE %s
AND m.month LIKE %s
ORDER BY f.title

Danke schon mal für eure Hilfe.

Gruß

Robert

Re: Abfrage ergebislos

am 23.04.2008 11:01:04 von Gregor Kofler

Robert Fall meinte:
> Hallo
>
> Ich habe eine DB-Abfrage (PHP/MySQL-5.0.51a) die mittels 3 Dropdown-Menüs
> insgesamt 4 Tabellen abfrägt soweit hingekriegt, daß keine Fehlermeldung
> mehr angezeigt wird. Weder PHP- noch SQL-Errors. Ich bekomme trotzdem keine
> Ergebnisse angezeigt. Da ich in MySQL nicht ganz so firm bin, bitte ich euch
> mal meine Select-Abfrage zu überprüfen. Vielleicht liegt's am SQL-Code.

Sogar ganz sicher.

> SELECT *
> FROM festivals as f
> INNER JOIN f_categories AS c ON c.id = f.category
> INNER JOIN f_countries AS o ON o.id = f.country
> INNER JOIN f_months AS m ON m.id = f.month
> WHERE f.title LIKE %s
> AND c.category LIKE %s
> AND o.country LIKE %s
> AND m.month LIKE %s
> ORDER BY f.title

Was ist %s? Sollte ohnedies '%s' heissen. Und nachdem kein Monatsname
auf "s" endet, wird das Ergebnis immer leer sein.

Gregor


--
http://photo.gregorkofler.at ::: Landschafts- und Reisefotografie
http://web.gregorkofler.com ::: meine JS-Spielwiese
http://www.image2d.com ::: Bildagentur für den alpinen Raum

Re: Abfrage ergebislos

am 23.04.2008 11:04:56 von Christian Kirsch

Robert Fall schrieb:
> Hallo
>
> Ich habe eine DB-Abfrage (PHP/MySQL-5.0.51a) die mittels 3 Dropdown-Menüs
> insgesamt 4 Tabellen abfrägt soweit hingekriegt, daß keine Fehlermeldung
> mehr angezeigt wird. Weder PHP- noch SQL-Errors. Ich bekomme trotzdem keine
> Ergebnisse angezeigt.

Tja, dann wird wohl kein passender Datensatz vorhanden sein...

> Da ich in MySQL nicht ganz so firm bin, bitte ich euch
> mal meine Select-Abfrage zu überprüfen. Vielleicht liegt's am SQL-Code.
>
> SELECT *
> FROM festivals as f
> INNER JOIN f_categories AS c ON c.id = f.category
> INNER JOIN f_countries AS o ON o.id = f.country
> INNER JOIN f_months AS m ON m.id = f.month
> WHERE f.title LIKE %s
> AND c.category LIKE %s
> AND o.country LIKE %s
> AND m.month LIKE %s
> ORDER BY f.title
>

Ein paar Hinweise (unsortiert):

- Strings werden in SQL mit ' begrenzt. Sowas wie "LIKE %s" sollte also
einen Syntaxfehler liefern ...

mysql> select count(*) from autoren where nname like %m;
ERROR 1064 (42000): You have an error in your SQL syntax; check the
manual that corresponds to your MySQL server version for the right
syntax to use near '%m' at line 1


Tut es auch. Deine Behauptung, Du bekämst keine SQL-Fehler ist also
entweder eine Lüge oder Du hast nicht nachgeguckt oder Du hast hier
nicht das angegebene Statement gepostet sondern irgendwas.

- AND hat in boolscher Algebra (-> Wikipedia?) eine bestimmte Bedeutung.
Nicht notwendigerweise die, die man umgangssprachlich mit "und" verbindet.

- Warum vermutest Du, dass etwas sowohl einen Titel ('title' steht ja
wohl dafür?) als auch einen Monat bezeichnen könne? Bei mir sind Monate
üblicherweise Integer (da Du nichts über Deine Tabellenstruktur
verrätst, weiß ich nicht, wie das bei Dir aussieht) - es ergibt also
herzlich wenig Sinn, nach "Lieschen Müller" im Feld "Monat" zu suchen.

Wenn Du Datenbankprogrammierung betreiben willst, besorg Dir am besten
ein geeignetes Buch dazu. Und lies die MySQL-Dokumentation
(dev.mysql.com/doc), sie enthält auch ein Tutorial.

Re: Abfrage ergebislos

am 23.04.2008 11:09:13 von Gregor Kofler

Robert Fall meinte:
> Hallo
>
> Ich habe eine DB-Abfrage (PHP/MySQL-5.0.51a) die mittels 3 Dropdown-Menüs
> insgesamt 4 Tabellen abfrägt soweit hingekriegt, daß keine Fehlermeldung
> mehr angezeigt wird. Weder PHP- noch SQL-Errors. Ich bekomme trotzdem keine
> Ergebnisse angezeigt. Da ich in MySQL nicht ganz so firm bin, bitte ich euch
> mal meine Select-Abfrage zu überprüfen. Vielleicht liegt's am SQL-Code.
>
> SELECT *
> FROM festivals as f
> INNER JOIN f_categories AS c ON c.id = f.category
> INNER JOIN f_countries AS o ON o.id = f.country
> INNER JOIN f_months AS m ON m.id = f.month
> WHERE f.title LIKE %s
> AND c.category LIKE %s
> AND o.country LIKE %s
> AND m.month LIKE %s
> ORDER BY f.title
>
> Danke schon mal für eure Hilfe.
>

Ah. PHP. sprintf(). Richtig? Dann sollte man noch wissen, was in den
restlichen Parametern steht. Poste dein Statement so, wie es an den
Server ausgeliefert wird. Soll ja kein Ratespiel sein. Oder?

Gregor



--
http://photo.gregorkofler.at ::: Landschafts- und Reisefotografie
http://web.gregorkofler.com ::: meine JS-Spielwiese
http://www.image2d.com ::: Bildagentur für den alpinen Raum

Re: Abfrage ergebislos

am 23.04.2008 12:20:14 von Robert Fall

"Gregor Kofler" replies

> Ah. PHP. sprintf(). Richtig? Dann sollte man noch wissen, was in den
> restlichen Parametern steht. Poste dein Statement so, wie es an den Server
> ausgeliefert wird. Soll ja kein Ratespiel sein. Oder?
>
> Gregor

Besten Dank für eure Antworten !

Anbei das ganze Script. Ist allerdings hauptsächlich eine
PHP-Angelegenheit.

Robert


if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "",
$theNotDefinedValue = "")
{
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

$theValue = function_exists("mysql_real_escape_string") ?
mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" :
"NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue :
$theNotDefinedValue;
break;
}
return $theValue;
}
}

$colname_rs = "-1";
if (isset($_POST['title'])) {
$colname_rs = (get_magic_quotes_gpc()) ? $_POST['title'] :
addslashes($_POST['title']);
}
$colfarbe_rs = "-1";
if (isset($_POST['category'])) {
$colfarbe_rs = (get_magic_quotes_gpc()) ? $_POST['category'] :
addslashes($_POST['category']);
}
$colps_rs = "-1";
if (isset($_POST['country'])) {
$colps_rs = (get_magic_quotes_gpc()) ? $_POST['country'] :
addslashes($_POST['country']);
}
$colps_rs = "-1";
if (isset($_POST['month'])) {
$colps_rs = (get_magic_quotes_gpc()) ? $_POST['month'] :
addslashes($_POST['month']);
}
mysql_select_db($database_festival, $festival);
$query_rs = sprintf("SELECT *
FROM festivals as f
INNER JOIN f_categories AS c ON c.id = f.category
INNER JOIN f_countries AS o ON o.id = f.country
INNER JOIN f_months AS m ON m.id = f.month
WHERE f.title LIKE %s
AND c.category LIKE %s
AND o.country LIKE %s
AND m.month LIKE %s
ORDER BY f.title", GetSQLValueString($colname_rs, "text"),
GetSQLValueString($coltitle_rs, "text"), GetSQLValueString($colcategory_rs,
"text"), GetSQLValueString($colcountry_rs, "text"),
GetSQLValueString($colmonth_rs, "text"));
$rs = mysql_query($query_rs, $festival) or die(mysql_error());
$row_rs = mysql_fetch_assoc($rs);
$totalRows_rs = mysql_num_rows($rs);
?>
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">



Abfrage-Test










bordercolor="#CC3333">










mysql_free_result($rs);
?>

Re: Abfrage ergebislos

am 23.04.2008 12:26:55 von Robert Fall

Gregor Kofler schrieb
> Sogar ganz sicher.
>
>> SELECT *
>> FROM festivals as f
>> INNER JOIN f_categories AS c ON c.id = f.category
>> INNER JOIN f_countries AS o ON o.id = f.country
>> INNER JOIN f_months AS m ON m.id = f.month
>> WHERE f.title LIKE %s
>> AND c.category LIKE %s
>> AND o.country LIKE %s
>> AND m.month LIKE %s
>> ORDER BY f.title
>
> Was ist %s? Sollte ohnedies '%s' heissen. Und nachdem kein Monatsname auf
> "s" endet, wird das Ergebnis immer leer sein.

Hallo
Danke.

Eine einzelne Tabelle läßt sich mit dieser Syntax (unten) problemlos
abfragen.
Auch wenn keines der Ergebnisse auf "s" endet.


SELECT * FROM fahrzeug WHERE auto like %s and farbe like %s and ps like %s

Robert

Re: Abfrage ergebislos

am 23.04.2008 12:43:54 von Christian Kirsch

Robert Fall schrieb:
> Gregor Kofler schrieb
>> Sogar ganz sicher.
>>
>>> SELECT *
>>> FROM festivals as f
>>> INNER JOIN f_categories AS c ON c.id = f.category
>>> INNER JOIN f_countries AS o ON o.id = f.country
>>> INNER JOIN f_months AS m ON m.id = f.month
>>> WHERE f.title LIKE %s
>>> AND c.category LIKE %s
>>> AND o.country LIKE %s
>>> AND m.month LIKE %s
>>> ORDER BY f.title
>> Was ist %s? Sollte ohnedies '%s' heissen. Und nachdem kein Monatsname auf
>> "s" endet, wird das Ergebnis immer leer sein.
>
> Hallo
> Danke.
>
> Eine einzelne Tabelle läßt sich mit dieser Syntax (unten) problemlos
> abfragen.
> Auch wenn keines der Ergebnisse auf "s" endet.
>
>
> SELECT * FROM fahrzeug WHERE auto like %s and farbe like %s and ps like %s
>
>
Das gibt bei mir immer noch einen Syntaxfehler, denn der String nach
like MUSS in Anführungszeichen stehen.

Re: Abfrage ergebislos

am 23.04.2008 13:51:42 von Robert Fall

> Anbei das ganze Script. Ist allerdings hauptsächlich eine
> PHP-Angelegenheit.
>
> Robert

..

Hab das Script nochmal überprüft:
einige Variablen waren falsch benannt.
Läuft zwar noch immer nicht,
Könnte falsch liegen, aber ich vermute daß eher der PHP-Code das Problem
ist.

Tut mir Leid.

Herzlichen Dank aber für eure Mithilfe.

Gruß Robert

Re: Abfrage ergebislos

am 23.04.2008 18:01:22 von Sven Paulus

Robert Fall wrote:
> Könnte falsch liegen, aber ich vermute daß eher der PHP-Code das Pr=
oblem=20
> ist.

Warum schaust Du nicht einfach in Dein MySQL-Query-Log (-> Option "log" in
der Config), wie die Queries aussehen, die Dein Code erzeugt? Diese kannst
Du dann ja einfach mal mit Queries, die Du manuell ueber das
mysql-Kommandozeilentool ausfuehrst und die bekannterweise funktionieren,
vergleichen. Das ist dann nicht ganz so im Dunkeln rumgetappst ...

Re: Abfrage ergebislos

am 23.04.2008 20:32:37 von Claus Reibenstein

Robert Fall schrieb:

> Anbei das ganze Script. Ist allerdings hauptsächlich eine
> PHP-Angelegenheit.

Und damit wird es hier nun _endgültig_ off topic.

PHP wird in news:de.comp.lang.php.* diskutiert. Speziell für
Datenbankthemen im Zusammenhang mit PHP ist
news:de.comp.lang.php.datenbanken da.

Wenn Du also willst, dass man Dir _hier_ hilft, poste bitte
_ausschließlich_ das reine SQL-Kommando. Falls Du Hilfe zu Deinem
PHP-Code suchst, schaue Dich in den zuvor genannten Gruppen um.

Gruß. Claus

Re: Abfrage ergebislos

am 24.04.2008 08:29:43 von Thomas Rachel

Robert Fall schrieb:
> $query_rs = sprintf("SELECT *
> FROM festivals as f
> INNER JOIN f_categories AS c ON c.id = f.category
> INNER JOIN f_countries AS o ON o.id = f.country
> INNER JOIN f_months AS m ON m.id = f.month
> WHERE f.title LIKE %s
> AND c.category LIKE %s
> AND o.country LIKE %s
> AND m.month LIKE %s
> ORDER BY f.title", GetSQLValueString($colname_rs, "text"),
> GetSQLValueString($coltitle_rs, "text"), GetSQLValueString($colcategory_rs,
> "text"), GetSQLValueString($colcountry_rs, "text"),
> GetSQLValueString($colmonth_rs, "text"));

Und für diese Gruppe wäre *ausschließlich* der Wert von $query_rs
relevant gewesen.

HTH,

Thomas