2009-08-05 7 views
0

Cela fonctionne.Variable PHP Passage ne fonctionnant pas dans l'appel de base de données

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

Cela ne fonctionne pas et arrête php mort sans rapports d'erreurs.

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

J'ai essayé un certain nombre de configurations et rien ne fonctionne.

Répondre

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

Vous avez toujours besoin des guillemets simples dans la requête SQL.

+0

Merci. C'était ça. J'ai des guillemets simples ailleurs dans mes appels de base de données en utilisant des tableaux. Donc je ne sais pas pourquoi cet appel nécessiterait une syntaxe différente. – Jeff

+0

Je pense que vous avez peut-être mal compris le montage. Si $ myvalue était égal à "foo", en utilisant votre script original, le SQL serait devenu "type = foo" et en SQL cela signifie "l'attribut type est égal à l'attribut foo". Avec mon édition, le SQL devient "type = 'foo'" ce qui signifie "l'attribut type est égal à la chaîne 'foo'". –

2

Souvenez-vous de citer la valeur passée:

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

devrait être:

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

Notez le guillemets simples ajoutés à type.

2

Vous avez toujours besoin de guillemets simples. Alors

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

essayer

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

Vous n'êtes pas échapper à votre valeur et vous oubliez vos guillemets simples, ce serait ma conjecture. Essayez:

function get_distinct_size_for_bracelets($myvalue) { 
    $query = sprintf("SELECT DISTINCT size FROM mytable WHERE id = 27 AND type='%s' ORDER BY size", 
     mysql_real_escape_string($myvalue)); 
} 

Cela vous permet de transmettre une valeur échappée dans la chaîne, par opposition à l'utilisation de la concaténation.

0

MySQL a aussi différents types de données. Et strings doivent être entre guillemets aussi:

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

Ou mieux avec l'utilisation supplémentaire du mysql_real_escape_string function:

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