Einzelnen Beitrag anzeigen
  #1  
Alt 18.07.2004, 17:43:32
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
Typische Fehlerquellen im SQL - bitte VOR dem Posten lesen!

Da ich in diesem Forum immer wieder ein paar typische Fehler beobachtet habe, hier mal einige Fehlerquellen, die bitte in Zukunft vor einem neuen Posting zu beachten und außzuschließen sind:

1. Bitte Werte/Variablen mit Hochkommata umschließen, so lange der spalten-typ kein int ist, also

"SELECT feld FROM tabelle WHERE id = $id AND name = 'Kurt'" //$id ist dem fall z.b. 52342365

Ist ein Wert ein Array-Element, kommen innerhalb der Hochkommata (hochkommata nur wenn spalten-typ nicht int) um das Elemtent geschwungene Klammern:

"SELECT feld FROM tabelle WHERE id = {$userdata[ 'id' ]}"

Wird eine Variable/Methode aus einer KLasse benutzt, so hat das wie folgt auszusehen:

"SELECT " . $db->feldname . " FROM tabelle WHERE id = " . $user->getId();

2. Es gibt reservierte Wörter, wie z.b. DATE. Das sind Funktionen in sql. Diese Namen dürfen zwar als Spaltennamen verwendet werden, sollten jedoch - um die Verwechslung auszuschließen - von Backticks umgeben sein. Dieses Zeichen findet ihr in der Regel neben der Backspace-Taste bei gedrückter Shift-Taste; danach muss noch Space gedrückt werden:

`

z.b.:

"SELECT `timestamp` FROM tabelle"

Sollten Tabellen verknüpft werden, hat das so auszusehen:

"SELECT `time`.`timestamp` , `datetime`.`time` FROM `time` , `datetime`"

Eine Übersicht über alle reservierten Wörter:

http://dev.mysql.com/doc/refman/4.1/...ved-words.html

3. Ich habe auch gesehen, dass einige "Neulinge", wenn der Wert genau einer Zelle ausgelesen wird, erwarten, dass der Inhalt der Zelle direkt der Rückgabewert der sql-Abfrage ist. Dem ist nicht so.

PHP-Code:
$sql "SELECT feldname FROM tabelle WHERE id = 3";
$qry mysql_query$sql ); 
nun gibt

echo $qry;

nicht den Inhalt der Zelle feldname in der Zeile wo id = 3 ist aus.

es muss auch hier so aussehen:
PHP-Code:
$sql "SELECT feldname FROM tabelle WHERE id = 3";
$qry mysql_query$sql );

$result mysql_fetch_array$qry );
echo 
$result'feldname' ]; 
4. arrays lassen sich nicht so ohne weiteres in zellen speichern.
man muss sie vorher mit serialize() in einen string umwandeln. nach dem auslesen wieder mit unserialize() in ein array verwandeln. dies gilt übrigens auch für das speichern von arrays in cookies.

5. ich zitiere mal c4:

Zitat:
Mit Version 4.1 wurde in PHP ein neues Sicherheitskonzept eingeführt, welches seit Version 4.2 standardmäßig aktiviert ist. Seit dem muss man alle übergebenen Variablen mit
$_GET['variable'] - für Urlparameter
$_POST['variable'] - für mit method=post versendete Parameter
$_COOKIE['variable'] - für Cookies
$_REQUEST['variable'] - $_POST, $_GET und $_COOKIE zusammen
$_FILES['variable'] - für hochgeladene Dateien
$_SERVER['variable'] - für Servervariablen (z.B. $_SERVER['PHP_SELF'])
$_ENV['variable'] - für Umgebungsvariablen
ansprechen. Also ehemals $str mit $_GET['str']
Oder Du setzt in der php.ini register_globals auf on. Davon rate ich aber ab.
6. Bitte überprüft eure SQL-Statements auch _immer_ auf Tippfehler!

7. Wenn ihr etwas postet, was fehlerhaft ist, dann auch bitte den dazugehörigen MySQL-Error; den bekommt ihr wie folgt heraus:

PHP-Code:
$sql "SELECT bla FROM blubb WHERE blipp";
$qry mysql_query$sql ) or die( mysql_error() ); 
Falls nun die SQL-Abfrage fehlerhaft sein sollte, wird euch die zugehörige errormessage ganz von alleine ausgegeben.

8. Falls ihr obenstehendes beachtet habt, gebt euch euer SQL-Statement via echo aus und schaut, ob alles so aussieht, wie ihr es euch vorgestellt habt.

========================================
Ich kleb das mal als sticky fest, wenn jemandem noch was einfällt, bitte hier hin posten.

Geändert von feuervogel (03.09.2006 um 20:12:06 Uhr)
Mit Zitat antworten