PHP-Variable in SELECT

PHP-Variable in SELECT

am 20.01.2005 20:06:38 von ingo.stoecker

Hallo,

ich hoffe ich bin nicht der x-te mit solch einer Frage. Eine entsprechende
(GOOGLE)-Suche brachte noch keinen Erfolg.

Ich möchte per select-Abfrage einen bestimmten Datensatz ausgeben. Um eine
gewisse Dynamik zu erreichen, möchte ich den entsprechenden Datensatz über
die URL (www.test.de/test.php?name=meier) an die select-Abfrage schicken.
LEider funktioniert es nicht und ich bekomme eine "unkown column"
Fehlermeldung. Meine Code ist auszugsweise so:

$query = "SELECT `geburtsdatum` FROM `team` WHERE `name` = `$name` LIMIT 0 ,
30";
$result = mysql_query($query);
if (mysql_errno()) die("
" . mysql_errno().":
".mysql_error()."
");
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
if (mysql_errno()) die("
" . mysql_errno().":
".mysql_error()."
");
foreach ($row as $name=>$column)
{
echo "$column";
}
}

--
MfG,

Ingo Stöcker

www.kobe8.de
www.svwassmannsdorf.de
www.asbh-potsdam.de
www.ihrkuechenpartner.com

Re: PHP-Variable in SELECT

am 20.01.2005 20:14:10 von Mario Mueller

Am 20.01.05 um 20:06 Uhr schrieb Ingo Stöcker:

> Meine Code ist auszugsweise so:
>
> $query = "SELECT `geburtsdatum` FROM `team` WHERE `name` = `$name` LIMIT 0 ,
> 30";

Wieviel Jahre wird es wohl noch dauern, bis ...

Warum funktionieren meine Formulare nicht?
http://www.php-faq.de/q/q-formular-register-globals.html

.... auch der Letzte gelesen hat? Desweiteren ist es extrem gefährlich,
einen Parameter ohne Prüfung und Vorbehandlung als SQL-Abfrage
zurchzulassen.

Prüfe importierte Parameter. Traue niemandem
http://www.php-faq.de/q/q-sicherheit-parameter.html

m.m

--
Fremdsprachen Online Lernen http://www.lingo4u.de/

Re: PHP-Variable in SELECT

am 20.01.2005 20:15:55 von Mario Mueller

Am 20.01.05 um 20:06 Uhr schrieb Ingo Stöcker:

> LEider funktioniert es nicht und ich bekomme eine "unkown column"

Nachtrag: "unkown column" deutet ja eigentlich darauf hin, dass es die
Spalte 'name' in deiner Tabelle 'team' nicht gibt.

m.m

--
Fremdsprachen Online Lernen http://www.lingo4u.de/

Re: PHP-Variable in SELECT

am 20.01.2005 20:25:43 von Thomas Hamacher

Ingo Stöcker schrieb:

> ich hoffe ich bin nicht der x-te mit solch einer Frage. Eine entsprechende
> (GOOGLE)-Suche brachte noch keinen Erfolg.

Das Lesen des Manuals hätte Erfolg gebracht, dann hättest du nämlich
gemerkt, dass dein Query kaputt ist.

> $query = "SELECT `geburtsdatum` FROM `team` WHERE `name` = `$name` LIMIT 0 ,
^ ^
Die Backticks haben da nichts verloren, du versucht die Spalte `name`
mit der Spalte `meier` zu vergleichen, die es nicht gibt. Strings werden
in SQL in ' oder " eingeschlossen (wobei ich mir bei letzterem nicht
sicher bin).

.... WHERE name = '$name' ...

Zudem ist es ziemlich leichtsinnig, die Benutzereingabe direkt ungeprüft
im SQL Statement zu verwenden. man SQL Injection.

Re: PHP-Variable in SELECT

am 20.01.2005 20:51:02 von ingo.stoecker

Hallo Thomas,

vielen Dank für deine schnelle und unkomplizierte Hilfe. Es lag wirklich in
den `. Ich habe nun Tabelle und Column ohne ` geschrieben. Die Übergabe der
Variable funktioniert nun auch und zwar so:

$query = "SELECT geburtsdatum FROM team WHERE name LIKE '$name' LIMIT 0 ,
30";

Danke,

Kobe #8

Re: PHP-Variable in SELECT

am 20.01.2005 21:13:43 von Thomas Hamacher

Ingo Stöcker schrieb:

> vielen Dank für deine schnelle und unkomplizierte Hilfe. Es lag wirklich in
> den `. Ich habe nun Tabelle und Column ohne ` geschrieben.

Tabellen- und Spaltenbezeichner kannst du bei MySQL in Backticks
einschliessen, das war völlig korrekt. Das erlaubt zum Beispiel das
verwenden von reservierten Wörtern, was man allerdings grundsätzlich
vermeiden sollte.




Du darfst nur den String ($name) nicht in diese Backticks einschliessen,
da MySQL dann denkt, du meinst eine Spalte und keinen String.

SELECT ... FROM `tabelle` WHERE `name` = '$name'

Da die Backticks aber AFAIK nur mit MySQL Datenbanken funktionieren ist
es schon gut, dass du sie ganz weggelassen hast.

Re: PHP-Variable in SELECT

am 20.01.2005 22:08:33 von Hartmut Holzgraefe

Ingo Stöcker wrote:
> Die Übergabe der Variable funktioniert nun auch und zwar so:
>=20
> $query =3D "SELECT geburtsdatum FROM team WHERE name LIKE '$name' LIMIT=
0 ,
> 30";

Du willst immer noch ganz ganz dringend register_globals ausschalten,
statt $name $_GET["name"] verwenden *und* "name" nicht ungeprüft in
deine Query einsetzen.

Tip: noch einmal alle Links anschauen die Mario erwähnt hat,
und außerdem http://php.net/mysql_real_escape

--=20
Hartmut Holzgraefe, Senior Support Engineer .
MySQL AB, www.mysql.com

Are you MySQL certified? www.mysql.com/certification