2009-12-09 7 views
0

Maintenant, quand je soumets le caractère ' je reçois l'erreur suivante énumérée ci-dessous autre que tout est ok quand je soumets des mots. J'utilise htmlentities() et j'ai toujours cette erreur.PHP/MySQL - Erreur de syntaxe SQL?

Comment puis-je empêcher cette erreur de se produire est-il possible de permettre ou de convertir ou d'arrêter l'affichage du caractère ' en tant qu'erreur?

Voici l'erreur que je reçois.

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '''')' 
+0

@Pascal MARTIN et @Josh Davis vos deux réponses m'a aidé à corriger mon problème. Donc, je ne sais vraiment pas qui récompenser, donc je vais laisser SO décider. – SlapThiS

Répondre

6

Vous devez échapper les chaînes que vous envoyez dans vos requêtes SQL.

Pour cela, vous pouvez utiliser la fonction mysql_real_escape_string.

Par exemple, votre code pourrait ressembler à ceci (non testé, mais quelque chose comme ça devrait faire l'affaire):

$str = "abcd'efh"; 
$sql_query = "insert into my_table (my_field) values ('" 
    . mysql_real_escape_string($str) 
    . "')"; 
$result = mysql_query($sql_query); 


Une autre solution (il faudra plus de travail, bien que, comme vous devrez changer plus de code) serait d'utiliser des instructions préparées; soit avec mysqli_* ou PDO - mais pas possible avec l'ancienne extension mysql_*.


Edit: si cela ne fonctionne pas, vous pouvez modifier votre question, pour nous donner plus d'informations? Comme le morceau de code qui provoque l'erreur?

+0

J'utilise ça aussi? encore je reçois cette erreur. – SlapThiS

0

Vous devez échapper aux cordes en utilisant la méthode appropriée. Vous n'avez pas mentionné les fonctions PHP que vous avez utilisées, donc c'est difficile à deviner. Vous devez poster l'extrait pertinent de PHP, mais voici quelques exemples:

$text = "x'x"; 

// MySQL extension 
mysql_query($db, "INSERT INTO table VALUES ('" . mysql_real_escape_string($text, $db) . "')"); 

// MySQLi extension 
$db->query("INSERT INTO table VALUES ('" . $db->mysql_real_escape_string($text) . "')"); 

// PDO's prepared statement 
$stmt = $pdo->prepare('INSERT INTO table VALUES (:myvalue)'); 
$stmt->execute(array(
    'myvalue' => $text 
)); 

// Another example 
$stmt = $pdo->prepare(
    'SELECT * 
     FROM users 
     WHERE first_name = :first 
     AND last_name = :last' 
); 

$stmt->execute(array(
    'first' => 'John', 
    'last' => 'Smith' 
)); 

foreach ($stmt as $row) 
{ 
    echo $row['user_id']; 
} 

Je recommande fortement d'utiliser l » prepared statementsPDO, il est plus court et plus facile de taper à utiliser à long terme.

+0

Quels sont les PDO que j'ai jamais vraiment entendu parler des PDO, y a-t-il des tutoriels sur les PDOs qui ne comprennent pas php.net et que je vais vérifier en une seconde? – SlapThiS

+0

Ajout d'un lien vers le manuel et un autre exemple pour PDO. –

0

mettez votre requête SQL dans une variable, par ex.

$query = "SELECT * FROM table WHERE field= ".mysql_real_escape_string($var).""; 

echo $query; 

$result = mysql_query($query); 

vous pouvez vérifier ce qui est réellement envoyé à mysql que la requête