mysql_real_escape_string travail arrêté quand je me suis déplacé mon code à un autre serveur

StackOverflow https://stackoverflow.com/questions/8808588

Question

Le code suivant fonctionne parfaitement bien dans mon installation xampp locale (Windows 7), mais quand je l'ai porté vers un serveur Win2k8 R2, la pièce mysql_real_escape_string ne fonctionne pas. Quand je la mettre en commentaire, cela fonctionne très bien. Je suis assez sûr que cela a quelque chose à voir avec le fichier php.ini mais ne peut pas repérer ce qu'il est. Peut-être que mon code aurait dû être écrit différemment pour commencer.

function add_asset($asset_type_ID, $org_ID, $asset_desc, $asset_cost, $asset_value, $purchase_date) {
    global $db;
    $asset_desc = mysql_real_escape_string($asset_desc);
    $query = "INSERT INTO assets
                 (asset_ID, asset_type_ID, org_ID, asset_desc, asset_cost, asset_value, purchase_date)
              VALUES
                 (DEFAULT, '$asset_type_ID', '$org_ID', '$asset_desc', '$asset_cost', '$asset_value', '$purchase_date')";
    $add_asset = $db->exec($query);
    $last_asset_ID = $db->lastInsertId();
    return $last_asset_ID;

Plus précisément, lorsque l'enregistrement est entré en se mysql, le champ asset_desc est vide.

Merci!

MISE À JOUR: Après avoir regardé à travers le journal des erreurs PHP, je l'ai trouvé ce qui suit:

[ function.mysql-real-escape-string ]: Accès refusé pour l'utilisateur '' @ 'localhost' (en utilisant le mot de passe: NO)

Était-ce utile?

La solution

On dirait que tout ce que les informations d'identification que vous utilisez pour vous connecter à la base de données sur votre système dev ne parviennent pas sur votre serveur.

mysql_real_escape_string() nécessite une connexion MySQL actif pour qu'il fonctionne correctement; si vous n'êtes pas connecté à la base de données, il échouera.

  • Vérifiez où dans votre code que vous appelez mysql_connect(); du message d'erreur, il semble que votre système dev se fonde sur les exécution des valeurs par défaut pour l'extension Mysql .

  • Vous pouvez également la ressource de connexion pourrait ne pas être accessible à mysql_real_escape_string() sur le système du serveur. De la documentation mysql_real_escape_string() (moi qui souligne):

    link_identifier

    La connexion MySQL. Si l'identifiant de connexion n'est pas spécifié, le dernier lien ouvert par mysql_connect() est supposé. Si un tel lien se trouve, il va essayer de créer un comme si mysql_connect() a été appelée sans arguments. Si aucune connexion est trouvée ou établie, une erreur de niveau E_WARNING est générée.

    Peut-être il est possible que votre serveur de dev est configuré de telle sorte que l'appel mysql_connect() sans argument n'établit une connexion au serveur de base de données MySQL. Les raisons les plus probables pour ce sont soit serveur dev MySQL permet les connexions anonymes, ou d'indiquer les informations d'identification php.ini par défaut valide.

    Cependant, cela ne fonctionne pas sur la production, très probablement parce que le serveur MySQL de production ne permet pas les connexions anonymes et aucune information d'identification par défaut sont spécifiées dans le fichier php.ini.

    Vérifiez sur votre code pour les situations où il est possible d'arriver à l'appel à mysql_real_escape_string() sans mysql_connect() obtenir appelé d'abord (note que l'établissement d'une connexion avec AOP ne compte pas dans ce cas).

  • Puisque vous utilisez PDO, envisager de passer à instructions préparées , qui sera éliminer le besoin de tout mysql_real_escape_string().

Autres conseils

Vous pensez probablement des « citations magiques »

http://php.net/manual/en/security.magicquotes. disabling.php

Cette fonction a été dépréciée en php 5.3 http://php.net/manual/en/function.mysql-escape -string.php

Vous devrez réécrire votre code, utilisez idéalement PDO à partir de maintenant et d'utiliser des déclarations préparées.

rapide Réponse:

Se connecter à la base de données premier

Ensuite, utilisez le mysql_real_escape_string.

Non l'inverse ......

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top