Eigenartiges Probem bei SQL String in PHP Anweisung

Alles, was PHP betrifft, kann hier besprochen werden.

Eigenartiges Probem bei SQL String in PHP Anweisung

Postby pepebe » 11. April 2005 19:43

Also, ich bin neugierig ob mir das jemand erklären kann...

Frage: Warum funktioniert Beispiel 1 und Beispiel 2 nicht?
Der einzige Unterschied liegt in den WHERE Attributen...
Beispiel 1:
Code: Select all
function LoadValue($Race,$Position,$Value,$UserName,$Password){
    if (empty($Position)){
    echo "";}
    else {
    $Verbindung = mysql_connect("localhost","root","");
    $sql = 'SELECT * FROM `lrb_teams_positions` WHERE Race = "'.$Race.'" and Position = "'.$Position.'"';
    $Ergebnis = mysql_db_query('nexus_tm',$sql,$Verbindung);
    echo mysql_result($Ergebnis, 0, $Value);
    }
}

Beispiel 2:
Code: Select all
function LoadValue($Race,$Position,$Value,$UserName,$Password){
    if (empty($Position)){
    echo "";}
    else {
    $Verbindung = mysql_connect("localhost","root","");
    $sql = 'SELECT * FROM `lrb_teams_positions` WHERE Race = $Race and Position = $Position';
    $Ergebnis = mysql_db_query('nexus_tm',$sql,$Verbindung);
    echo mysql_result($Ergebnis, 0, $Value);
    }
}

Gruß,

pepebe :shock:
pepebe
 
Posts: 12
Joined: 07. February 2005 19:59

Postby 1Euro » 11. April 2005 19:55

ich würde PHP die Datenbank nennen in der Er das suchen soll ;)
Dies ist meine Welt!!!
1Euro
 
Posts: 188
Joined: 11. September 2004 17:50

Postby pepebe » 11. April 2005 20:46

Habe es vielleicht nicht richtig formuliert...

Eigentlich funktionierte bisher eine SQL Anweisung vom Typ:
Code: Select all
$sql = "SELECT foo, baa FROM gee WHERE hoo = 'laa' and ree = 'dee'"

auch so...

$A = "foo";
$B = "baa";
$C = "gee";
$D = "laa";
$E = "dee";

$sql = "SELECT $A,$B FROM $C WHERE hoo = $D and ree = $E";


Doch auf einmal nicht mehr...[/code]
pepebe
 
Posts: 12
Joined: 07. February 2005 19:59

Postby Wiedmann » 11. April 2005 20:49

1Euro wrote:ich würde PHP die Datenbank nennen in der Er das suchen soll

Das macht er in dieser Zeile (auch wenn diese Funktion veraltet ist):
pepebe wrote:
Code: Select all
$Ergebnis = mysql_db_query('nexus_tm',$sql,$Verbindung);


pepebe wrote:Frage: Warum funktioniert Beispiel 1 und Beispiel 2 nicht?
Der einzige Unterschied liegt in den WHERE Attributen...

Variablenersetzung gibt es nur innerhalb von Doublequotes:
http://de.php.net/manual/en/language.types.string.php
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby jakimo72 » 14. April 2005 21:40

Variablenersetzung funktioniert nur bei Doppelquotes,
und SQL-String sollten immer in einfachen Quotes stehen,
ansonsten knallt es bei Leerzeichen.

$eins = "eine Laus";

$sql = 'select * from tiere where tier = $eins'; //funktioniert nicht
$sql = "select * from tiere where tier = $eins"; //funktioniert auch nicht
$sql = "select * from tiere where tier = '$eins'"; //funktioniert
$sql = "select * from tiere where tier = '".$eins."'"; //funktioniert
User avatar
jakimo72
 
Posts: 151
Joined: 07. February 2005 13:25
Location: Hamburg-Barmbek

Postby Wiedmann » 14. April 2005 22:30

und SQL-String sollten immer in einfachen Quotes stehen,
ansonsten knallt es bei Leerzeichen.

Interessant, SQL-Querys sind so die einzigsten Strings, die ich generell in DoubleQuotes setz (Die lassen sich so besser lesen und man vermeidet Fehler)...

$sql = "select * from tiere where tier = $eins"; //funktioniert auch nicht
$sql = "select * from tiere where tier = '$eins'"; //funktioniert

wenn `tier` ein (VAR)CHAR-, DATUM oder TEXT/BLOB-Feld ist, dann gehört ein Wert dem du diesem Feld zuweisen willst in SingleQuotes. Beispiel eins funktioniert also deshalb nicht, weil da dann die SQL-Syntax eh schonmal falsch ist (je nach Wert und Server-Version hat man halt Glück und es tut trotzdem).

Beispiel zwei funktioniert deshalb, weil hier die SQL-Syntax stimmt. Wäre `tier` ein INT-Feld o.ä. wären hier alledings die SingleQuotes wieder zuviel.

Abgesehen davon, dass man Bezeichner auch in Backtickets setzten sollte:
Code: Select all
$sql = "
    SELECT *
    FROM `tiere`
    WHERE `tier` = '$eins'
";
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany


Return to PHP

Who is online

Users browsing this forum: No registered users and 2 guests