2009-08-05 8 views
0

Dies funktioniert.PHP Variable Passing funktioniert nicht in Datenbankaufruf

function get_distinct_size_for_bracelets() { 
    $sql = "SELECT DISTINCT size FROM mytable WHERE id = 27 AND type='plastic' ORDER BY size"; 
} 

Dies funktioniert nicht und stoppt php tot ohne Fehlerberichterstattung.

function get_distinct_size_for_bracelets($myvalue) { 
    $sql = "SELECT DISTINCT size FROM mytable WHERE id = 27 AND type=".$myvalue." ORDER BY size"; 
} 

Ich habe eine Reihe von Konfigurationen ausprobiert und nichts funktioniert.

Antwort

2
function get_distinct_size_for_bracelets($myvalue) { 
    $sql = "SELECT DISTINCT size FROM mytable WHERE id = 27 AND type='".$myvalue."' ORDER BY size"; 
} 

Sie benötigen immer noch die einfachen Anführungszeichen in der SQL-Abfrage.

+0

Dank. Das war's. An anderen Stellen in meinen Datenbankaufrufen verwende ich einfache Anführungszeichen mit Arrays. Ich weiß also nicht, warum dieser Aufruf eine andere Syntax erfordert. – Jeff

+0

Ich denke, vielleicht hast du den Schnitt falsch verstanden. Wenn $ myvalue gleich "foo" wäre, würde das SQL mit Ihrem ursprünglichen Skript "type = foo" werden und in SQL bedeutet dies "type Attribut ist gleich foo Attribut". Mit meiner Bearbeitung wird SQL zu "type = 'foo'", was bedeutet, dass "type attribute gleich der Zeichenkette 'foo'" ist. –

2

Denken Sie daran, den übergebenen Wert zu zitieren:

function get_distinct_size_for_bracelets($myvalue) 
{ 
$sql = "SELECT DISTINCT size FROM mytable WHERE id = 27 AND type=".$myvalue." ORDER BY size"; 
} 

werden sollten:

function get_distinct_size_for_bracelets($myvalue) 
{ 
$sql = "SELECT DISTINCT size FROM mytable WHERE id = 27 AND type='".$myvalue."' ORDER BY size"; 
} 

Beachten Sie die einfachen Anführungszeichen bei type hinzugefügt.

2

Sie brauchen immer noch einfache Anführungszeichen. So

$sql = "SELECT DISTINCT size FROM mytable WHERE id = 27 AND type='".$myvalue."' ORDER BY size"; 
0

versuchen

function get_distinct_size_for_bracelets($myvalue) { 
    $sql = "SELECT DISTINCT size FROM mytable WHERE id = 27 AND type='".$myvalue."' ORDER BY size"; 
} 
2

Sie sind nicht Ihren Wert zu entkommen und Sie Ihre einfache Anführungszeichen zu vergessen, das wäre meine Vermutung. Versuchen Sie:

Damit können Sie einen Escape-Wert in die Zeichenfolge übergeben, im Gegensatz zur Verwendung von Verkettung.

0

MySQL hat auch verschiedene Datentypen. Und strings müssen auch in Anführungszeichen eingeschlossen werden:

$sql = "SELECT DISTINCT size FROM mytable WHERE id = 27 AND type='".$myvalue."' ORDER BY size"; 

Oder besser mit zusätzlicher Nutzung der mysql_real_escape_string function:

$sql = "SELECT DISTINCT size FROM mytable WHERE id = 27 AND type='".mysql_real_escape_string($myvalue)."' ORDER BY size";