2011-04-07 5 views
0

Cette question est probablement très triviale, mais j'ai eu du mal avec lui pendant un certain temps et j'ai également essayé de trouver des réponses en ligne et toujours des erreurs.Mettre à jour la requête SQL - Définir les valeurs à la variable de chaîne PHP

Essayer d'écrire une simple requête UPDATE pour PHP/MySql forme:

$sql="UPDATE mytable SET numericValue = '".$someid."', description = '".$sometext."' WHERE id='".$myid."' "; 

Alors que toutes les valeurs numériques sont transmises et mises à jour très bien, je ne peux pas obtenir le droit de description. La colonne de description est un VARCHAR et $ sometext est une chaîne et je ne peux pas l'obtenir échappé/enveloppé avec des guillemets correctement.

Répondre

1

Vous devriez utiliser sprintf, cela évite la confusion des chaînes en fournissant des espaces réservés (% d pour les décimales,% s pour les chaînes). Voir le manual pour plus.

$sql= sprintf("UPDATE mytable SET numericValue = %d, description = '%s' WHERE id = %d", $someid, $sometext, $myid); 

Si $ someText vient GET/POST/.. vous devriez envelopper un mysql_real_escape_string() tout autour pour éviter l'injection SQL (ou utiliser AOP préparé des déclarations).

+1

sprintf() est une méthode moche si c'est une requête complexe avec beaucoup de valeurs à insérer. Il est beaucoup trop facile de mal placer les paramètres. mieux vaut masser les valeurs avant de construire la chaîne et ensuite la construire "traditionnellement", ou mieux encore, oui, utiliser PDO. –

+0

J'ai essayé la méthode sprintf, mais toujours pas réussi. L'enregistrement est en cours de mise à jour, mais seules les valeurs numériques changent - pas d'erreurs SQL, mais VARCHAR n'est pas mis à jour. – dkatwitt

+0

Stupid me. Misspelled une variable. Magie travaillée! Merci beaucoup. – dkatwitt

0
$sql="UPDATE mytable SET numericValue = '$someid' , description = '$sometext' WHERE id='$myid' "; 

Je pense que vous devez vous inquiéter de l'injection sql.

Questions connexes