mysql_real_escape_string travail arrêté quand je me suis déplacé mon code à un autre serveur
-
26-10-2019 - |
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)
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 documentationmysql_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 simysql_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()
sansmysql_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 ......