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