Tabelle vorhanden?

Tabelle vorhanden?

am 19.02.2005 02:04:56 von Peter Urlau

Hallo,
eigentlich wollte ich Fehler so abfangen:

$testobtabelle = mysql_query("SHOW TABLE FROM $db where $ken");
$data = mysql_fetch_row($testobtabelle);
if(mysql_num_rows($data) > 0) {

...................
}

Dabei ist $ken mein $_GET und trägt den Tabellennamen.
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result
resource, mysql_num_rows(): supplied argument is not a valid MySQL ....

Kann mir mal einer auf die Sprüne helfen?

Re: Tabelle vorhanden?

am 19.02.2005 02:27:24 von Johannes Mueller

Peter Urlau schrieb:

[snip MySQL-Problem]

> Dabei ist $ken mein $_GET und trägt den Tabellennamen.

besser (vielleicht machst dus ja auch schon)

$ken = mysql_real_escape_string($_GET['xy']);
das beugt mysql-injection[1] vor!

Hannes

P.S.: zum Problem siehe [2] und [3]

--
[1] http://www.heise.de/security/artikel/43175
[2] http://dev.mysql.com/doc/mysql/de/show-database-info.html
[3] http://www.little-idiot.de/mysql/mysql-126.html

Re: Tabelle vorhanden?

am 19.02.2005 03:32:10 von Niels Braczek

Peter Urlau schrieb:

> eigentlich wollte ich Fehler so abfangen:
>
> $testobtabelle = mysql_query("SHOW TABLE FROM $db where $ken");
> $data = mysql_fetch_row($testobtabelle);
> if(mysql_num_rows($data) > 0) {
>
> ..................
> }
>
> Dabei ist $ken mein $_GET und trägt den Tabellennamen.
> Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result
> resource, mysql_num_rows(): supplied argument is not a valid MySQL ....

Ein Blick ins Manual zeigt folgende Syntax:

SHOW [FULL|OPEN] TABLES [FROM db_name] [LIKE 'pattern']

mysql_num_rows() erwartet nicht einen Datensatz, sondern eine Ressource
als Parameter. Außerdem fehlt jegliche Fehlerbehandlung. Also:

$sqlStr = "SHOW TABLES FROM $db LIKE '$ken'";
$result = mysql_query($sqlStr)
or die($sqlStr.'
'.mysql_error());
$data = mysql_fetch_row($result);
if (mysql_num_rows($result) > 0) {...}

MfG
Niels

Re: Tabelle vorhanden?

am 19.02.2005 14:14:33 von Niels Braczek

Peter Urlau schrieb per PM (Quoting von Hand hergestellt):
> Niels Braczek schrieb:

>> mysql_num_rows() erwartet nicht einen Datensatz, sondern eine
>> Ressource als Parameter. Außerdem fehlt jegliche Fehlerbehandlung.

> Danke genau das richtige:
> Noch eine Ergänzungsfrage:
>
> Wenn ich schreibe:
> $sqlStr = "SHOW TABLES FROM $db LIKE '$get'";
> ist das Ergebnis von: $db= 1
> Error: SHOW TABLES FROM 1 LIKE 'g_2_1'
> die Datenbank weise ich so zu:
> $db = @mysql_select_db($varDBName); ... aus include
>
> Wenn ich schreibe:
> $sqlStr = "SHOW TABLES FROM datenbank LIKE '$get'";
> ist alles iO.
> meine open_inc ist meiner Meinung nach io
>
> Wo könnte ich den Fehler suchen?

Wo könnte dein Datenbank*name* stehen? Konsultiere das Manual zu den von
dir verwendeten (mysql-*-)Befehlen.

Zwei prinzipielle Tipps:
1. Zumindest bei Fehlersuche *immer*
error_reporting(E_ALL);
an den Anfang des Skripts.
2. Zumindest bei Fehlersuche *nie* Fehlermeldungen
mit Hilfe des @ unterdrücken.

MfG
Niels

BTW: Persönliche Mail war keinesfalls angemessen.

Re: Tabelle vorhanden?

am 20.02.2005 02:27:49 von Dennis Birkholz

Peter Urlau schrieb:
> Hallo,
> eigentlich wollte ich Fehler so abfangen:
>
> $testobtabelle = mysql_query("SHOW TABLE FROM $db where $ken");
> $data = mysql_fetch_row($testobtabelle);
> if(mysql_num_rows($data) > 0) {
>
> ..................
> }
>
> Dabei ist $ken mein $_GET und trägt den Tabellennamen.
> Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result
> resource, mysql_num_rows(): supplied argument is not a valid MySQL ....
>
> Kann mir mal einer auf die Sprüne helfen?
>
>
Hallo,

du solltest folgendes machen:

if ( $res = mysql_query("SHOW TABLES LIKE '$ken'") )
{
print mysql_num_rows($res);
}

Das zeigt dir an, ob es die Tabelle gibt. Vorher sollte aber $ken
unbedingt mit mysql_escape_string() "behandelt" werden

Grüße,
Dennis

Re: Tabelle vorhanden?

am 20.02.2005 03:28:59 von Niels Braczek

Dennis Birkholz schrieb:

> Das zeigt dir an, ob es die Tabelle gibt. Vorher sollte aber $ken
> unbedingt mit mysql_escape_string() "behandelt" werden

mysql_escape_string() ist veraltet. Verwende stattdessen
mysql_real_escape_string().

MfG
Niels

Re: Tabelle vorhanden?

am 20.02.2005 19:19:43 von Dennis Birkholz

Niels Braczek schrieb:
> Dennis Birkholz schrieb:
>
>> Das zeigt dir an, ob es die Tabelle gibt. Vorher sollte aber $ken
>> unbedingt mit mysql_escape_string() "behandelt" werden
>
>
> mysql_escape_string() ist veraltet. Verwende stattdessen
> mysql_real_escape_string().
>
> MfG
> Niels
Hallo Niels,

es kommt darauf an, ob du einen speziellen Characterset in MySQL verwendest.

Wie du im PHP-Manual lesen wirst, machen beide Funktionen das gleiche,
mysql_real_escape_string() berücksichtigt dabei den Charakterset der
übergebenen Verbindung.

Wenn also klar ist, dass der Standard-Character-Set benutzt wird, dann
kann man immer noch mysql_escape_string nehmen, ist nämlich nicht
veraltet, sonst wäre es als depricated markiert und in PHP5
wahrscheinlich nicht vorhanden.

Viele Grüße,
Dennis

Re: Tabelle vorhanden?

am 20.02.2005 19:30:52 von Niels Braczek

Dennis Birkholz schrieb:
> Niels Braczek schrieb:
>>Dennis Birkholz schrieb:
>>
>>>Das zeigt dir an, ob es die Tabelle gibt. Vorher sollte aber $ken
>>>unbedingt mit mysql_escape_string() "behandelt" werden
>>
>>mysql_escape_string() ist veraltet. Verwende stattdessen
>>mysql_real_escape_string().

> Wie du im PHP-Manual lesen wirst, machen beide Funktionen das gleiche,
> mysql_real_escape_string() berücksichtigt dabei den Charakterset der
> übergebenen Verbindung.
>
> Wenn also klar ist, dass der Standard-Character-Set benutzt wird, dann
> kann man immer noch mysql_escape_string nehmen, ist nämlich nicht
> veraltet, sonst wäre es als depricated markiert und in PHP5
> wahrscheinlich nicht vorhanden.

Zitat Manual:

,----
| Note: This function has been deprecated since PHP 4.3.0.
| Do not use this function. Use mysql_real_escape_string()
| instead.
`----

Unter PHP5 wirft die mysql_escape_string() eine Notice. Man kann sie
also *nicht* immer noch nehmen.

MfG
Niels

Re: Tabelle vorhanden?

am 03.03.2005 20:30:42 von Dennis Birkholz

Niels Braczek schrieb:
> Dennis Birkholz schrieb:
>
>> Niels Braczek schrieb:
>>
>>> Dennis Birkholz schrieb:
>>>
>>>> Das zeigt dir an, ob es die Tabelle gibt. Vorher sollte aber $ken
>>>> unbedingt mit mysql_escape_string() "behandelt" werden
>>>
>>>
>>> mysql_escape_string() ist veraltet. Verwende stattdessen
>>> mysql_real_escape_string().
>
> Zitat Manual:
>
> ,----
> | Note: This function has been deprecated since PHP 4.3.0.
> | Do not use this function. Use mysql_real_escape_string()
> | instead.
> `----
>
> Unter PHP5 wirft die mysql_escape_string() eine Notice. Man kann sie
> also *nicht* immer noch nehmen.
>
> MfG
> Niels

Ok, ich gebe mich geschlagen.

Allerdings ist das PHP-Handbuch leider sehr inkonsistent, früher stand
da mal [depricated] direkt hinter dem Funktionsnamen.

Das man da jetzt sooo weiter runterscrollen muss, bis man das findet... ;-)

Viele Grüße,
Dennis