2010-03-28 5 views
0

Ma requête: symboleTous les symboles après « et » dépouillé

mysql::getInstance()->update('requests', array('response' => mysql_real_escape_string($_POST['status'])), array('secret' => $_POST['secret'])); ?> 

Si je baguette magique pour ajouter la chaîne avec « & », tous les symboles après dépouillèrent « & ». !

Exemple: chaîne: "№;% :?() _ + @ # $%^&() _ +

dans la base de données que je ne vois que:! " №; %:? *() _ +! @ # $%^

Comment résoudre ce problème?

fonction de mise à jour, si quelqu'un besoin:

function update($table, $updateList, $whereConditions) 
{ 
    $updateQuery = ''; 
    foreach ($updateList as $key => $newValue) { 
     if (!is_numeric($newValue)) { 
      $newValue = "'" . $newValue . "'"; 
     } 
     if (strlen($updateQuery) == 0) { 
      $updateQuery .= '`' . $key . '` = ' . $newValue; 
     } else { 
      $updateQuery .= ', `' . $key . '` = ' . $newValue; 
     } 
    } 
    return $this->query('UPDATE ' . $table . ' SET ' . $updateQuery . $this->buildWhereClause($whereConditions)); 
} 

UPD: écho mysql :: getInstance() -> getLastSQL() dit:

UPDATE requests SET `response` = '!\"№;%:?*()_ [email protected]#$%^' WHERE `secret` = '52a4ab5f7f3e8491e60b71db7d775ee2' 

donc, problème avec la mise à jour de la fonction dans une base MySQL classe?

Slaks, je dois utiliser str_replace ('&', '% 28', $ query); ?

+1

Si vous échoez '$ _POST ['status']', que voyez-vous? – SLaks

+1

En tant que sidenote: Votre routine de mise à jour devrait assurer l'échappement des chaînes newValue, pas l'appelant. – hurikhan77

+0

hurikhan77, s'il vous plaît, puis-je regarder exemple de code? – user300413

Répondre

3

Vous passez probablement un caractère & brut dans la chaîne de requête, ce qui entraîne l'analyse de tous les éléments après le & en tant que second paramètre par PHP. (Avant qu'il ne soit dans votre variable)

Vous devez échapper à la & comme %26.

EDIT: Vous devez l'échapper avant de l'envoyer au serveur. (Lorsque vous effectuez la requête HTTP)

Questions connexes