Fehler in SQL String (geht nicht immer...)
Localhorst
- datenbank
0 EKKi0 Vinzenz Mai0 Localhorst0 Vinzenz Mai0 Localhorst0 Gino
Hallo Forum,
ich habe einen SQL String, der über eine Schleife aufgerufen wird, aber nicht immer funktioniert.
Ich setzte ihn über PHP mit folgendem Code zusammen
$sql_string="SELECT DISTINCT ceil( (TIMESTAMPDIFF(SECOND , NOW( ) , FROM_UNIXTIME( datum ) ) ) /86400 * -1
) AS days
FROM `".$row_gehirn_tabellen['gehirn'].$farb_db."`
WHERE user_id =$user_id and
status!=0";
echo $sql_string."<hr>";
$sql_query=mysql_query($sql_string);
while($days = mysql_fetch_assoc($sql_query)){
Den SQL String lasse ich zur Kontrolle gerade ausgeben. Folgender String funktionert.
SELECT DISTINCT ceil( ( TIMESTAMPDIFF( SECOND , NOW( ) , FROM_UNIXTIME( datum ) ) ) /86400 * -1 ) AS days from 16\_96 AG
WHERE user_id =1 and status!=0
Bei folgendem String (wo Null als korrektes Ergebnis ausgegeben werden sollte)
SELECT DISTINCT ceil( ( TIMESTAMPDIFF( SECOND , NOW( ) , FROM_UNIXTIME( datum ) ) ) /86400 * -1 ) AS days from 16\_96 Ma duenn
WHERE user_id =1 and status!=0
kommt jedoch
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/www/web262/html/brain_collection/funktionen.php on line 254
als Fehlermeldung. Die Tabelle gibt es aber auf jeden Fall. Kann es an den Leerzeichen liegen? Wobei in dem Tabellennamen des ersten Strings ist auch ein Leerzeichen.
Ich kann die SQL Abfrage von Hand in phpMyAdmin zusammen basteln, so dass sie komplett gleich ausschaut, dann klappt es. Kann es sein, dass ich irgendwelche Whitspaces in dem String habe? Auf meinem Windows Testsystem klappt alles, nur auf dem Unix Webspace Server nicht, evtl. hat es auch damit zu tun.
Über etwas Hilfe würde ich mich sehr freuen.
MfG
Localhorst
Mahlzeit Localhorst,
SELECT DISTINCT ceil( ( TIMESTAMPDIFF( SECOND , NOW( ) , FROM_UNIXTIME( datum ) ) ) /86400 * -1 ) AS days from
16\_96 AG
WHERE user_id =1 and status!=0SELECT DISTINCT ceil( ( TIMESTAMPDIFF( SECOND , NOW( ) , FROM_UNIXTIME( datum ) ) ) /86400 * -1 ) AS days from
16\_96 Ma duenn
WHERE user_id =1 and status!=0
Du schreibst jetzt bitte 1.000.000 x "Wer Leerzeichen in Tabellen- oder Spaltennamen benutzt, gehört an den Sackhaaren aufgehängt!". Danach änderst Du die Benennung der Tabellen und Spalten und anschließend funktioniert auch alles.
MfG,
EKKi
Du schreibst jetzt bitte 1.000.000 x "Wer Leerzeichen in Tabellen- oder Spaltennamen benutzt, gehört an den Sackhaaren aufgehängt!". Danach änderst Du die Benennung der Tabellen und Spalten und anschließend funktioniert auch alles.
Ok, wird erledigt :-)
Aber warum klappt es dann bei dem ersten String, welcher offensichtlich auch ein Leerzeichen enthält und bei dem zweiten nicht?
Auf meinem Windows System klappt es auch?
Hallo,
$sql_string="SELECT DISTINCT ceil( (TIMESTAMPDIFF(SECOND , NOW( ) , FROM_UNIXTIME( datum ) ) ) /86400 * -1
) AS days
Unix-Timestamps sind meiner Meinung nach eine schlechte Wahl, Zeitpunkte in einer Datenbank abzuspeichern.
Was soll Deine Berechnung bewirken? Das sieht viel zu kompliziert und vor allem fehlerhaft aus.
[...]
$sql_query=mysql_query($sql_string);
Warum überprüfst Du im Fehlerfall nicht den Inhalt von mysql_error()?
Tu das!
while($days = mysql_fetch_assoc($sql_query)){
> SELECT DISTINCT ceil( ( TIMESTAMPDIFF( SECOND , NOW( ) , FROM\_UNIXTIME( datum ) ) ) /86400 \* -1 ) AS days from `16\_96 AG` WHERE user\_id =1 and status!=0
Deine Tabellennamen sind denkbar schlecht gewählt.
> Bei folgendem String (wo Null als korrektes Ergebnis ausgegeben werden sollte)
NULL oder 0?
> SELECT DISTINCT ceil( ( TIMESTAMPDIFF( SECOND , NOW( ) , FROM\_UNIXTIME( datum ) ) ) /86400 \* -1 ) AS days from `16\_96 Ma duenn` WHERE user\_id =1 and status!=0
Warum sind offensichtlich gleichartige Daten in unterschiedlichen Tabellen gespeichert? Sieht nach einem weiteren Designfehler aus.
> Warning: mysql\_fetch\_assoc(): supplied argument is not a valid MySQL result resource in /home/www/web262/html/brain\_collection/funktionen.php on line 254
Tja, schau' Dir die Ausgabe von [mysql_error](http://www.php.net/manual/de/function.mysql-error.php) an und teile diese uns mit.
Freundliche Grüße
Vinzenz
Hi,
die Ausgabe von mysql_error() ergibt
Table 'usr_web262_2.16_96 Ma duenn' doesn't exist
Es gibt sie aber. Wie bereits geschrieben funktioniert es auch auf dem Windows System. Und der andere Tabellenname mit einem Leerzeichen geht.
Zu deinen weiteren Anmerkungen:
nicht NULL sondern
MySQL lieferte ein leeres Resultat zurück (d. h. null Zeilen). (die Abfrage dauerte 0.0116 sek.)(Diese Ausgabe bekomme ich von phpMyAdmin, wenn ich den String von Hand bastel)
Timestamps => mag sein, dass sie nicht das Optimum darstellen, sie Funktionieren aber einwandfrei und der SQL String ist in seiner Funktion absolut korrekt.
mysql_error => erledigt, Fehlermeldung siehe oben
Warum sind offensichtlich gleichartige Daten in unterschiedlichen Tabellen gespeichert? Sieht nach einem weiteren Designfehler aus => hier handelt es sich nicht um gleiche Daten und es ist genau so geplant. Ich habe meine Datenbank soweit es möglich war normalisiert und die Struktur genau so geplant!
Tabellennamen schlecht gewählt => sehe ich leider auch so....hoffe das es mit diesen Namen trotzdem gehen wird, da mir sonst viel Arbeit droht.
Gruß
Localhorst
Hallo,
Table 'usr_web262_2.16_96 Ma duenn' doesn't exist
Es gibt sie aber.
das nutzt Dir sehr viel, wenn MySQL sie nicht finden kann. Hast Du Groß- und Kleinschreibung beachtet?
Wie bereits geschrieben funktioniert es auch auf dem Windows System. Und der andere Tabellenname mit einem Leerzeichen geht.
Sondermüll in Tabellen- oder Spaltennamen geht, man muss diese halt kennzeichnen.
Freundliche Grüße
Vinzenz
Unter dem von dir geposteten Link habe ich bereits geschaut, hat mir aber keine Lösung gebracht.
Wo kann denn der Unterschied zwischen den folgenden beiden Strings liegen. Der erste ist mit phpMyAdmin generiert und funktioniert. Der Zweite kommt aus meinem Script und funktioniert auf dem Unix System nicht.
Geht:
SELECT DISTINCT ceil((TIMESTAMPDIFF(SECOND,NOW(),FROM_UNIXTIME( datum )))/86400*-1) AS days FROM 14\_94 MA duenn
WHERE user_id =1 and status!=0
Geht nicht:
SELECT DISTINCT ceil((TIMESTAMPDIFF(SECOND,NOW(),FROM_UNIXTIME( datum )))/86400*-1) AS days FROM 14\_94 Ma duenn
WHERE user_id =1 and status!=0
Moin!
Wo kann denn der Unterschied zwischen den folgenden beiden Strings liegen. Der erste ist mit phpMyAdmin generiert und funktioniert. Der Zweite kommt aus meinem Script und funktioniert auf dem Unix System nicht.
Geht:
SELECT DISTINCT ceil((TIMESTAMPDIFF(SECOND,NOW(),FROM_UNIXTIME( datum )))/86400*-1) AS days FROM14\_94 MA duenn
WHERE user_id =1 and status!=0Geht nicht:
SELECT DISTINCT ceil((TIMESTAMPDIFF(SECOND,NOW(),FROM_UNIXTIME( datum )))/86400*-1) AS days FROM14\_94 Ma duenn
WHERE user_id =1 and status!=0
Worin unterscheiden sich die beiden Strings? Gehe jedes Zeichen einzeln durch und liste bitte alle Unterschiede, die dir auffallen.
- Sven Rautenberg
Ahhhhhhh, jetzt schreibe ich es schon so untereinander und sehe es trotzdem nicht.....
Danke!!!!
Das war es.
Jetzt kann ich meinen Sondermüll, die Sackhaare, Design Fehler und alle weiteren am Rand bemerkten "Lösung Vorschläge" doch ganz einfach korrigieren.
Vielen Dank
Hallo,
Geht:
SELECT DISTINCT ceil((TIMESTAMPDIFF(SECOND,NOW(),FROM_UNIXTIME( datum )))/86400*-1) AS days FROM14\_94 MA duenn
WHERE user_id =1 and status!=0Geht nicht:
SELECT DISTINCT ceil((TIMESTAMPDIFF(SECOND,NOW(),FROM_UNIXTIME( datum )))/86400*-1) AS days FROM14\_94 Ma duenn
WHERE user_id =1 and status!=0
Ja, das dachte ich mir doch.
Wie schrieb ich vorhin:
das nutzt Dir sehr viel, wenn MySQL sie nicht finden kann. Hast Du Groß- und Kleinschreibung beachtet?
Freundliche Grüße
Vinzenz
Hallo,
Table 'usr_web262_2.16_96 Ma duenn' doesn't exist
Es gibt sie aber.das nutzt Dir sehr viel, wenn MySQL sie nicht finden kann. Hast Du Groß- und Kleinschreibung beachtet?
;) Das erinnert mich ein wenig an:
Dame meldet sich beim Support:
Dame:
Mein PC sagt er kann keinen Drucker erkennen. Ich verstehe das nicht.
Support:
Haben Sie die richtigen Treiber installiert?
Dame:
Was für Treiber. Also mein Drucker steht genau neben dem PC! Ich erkenn ihn doch auch!