PHP mysql_real_escape_string(): Accès refusé pour l'utilisateur "www-data'@'localhost'
Je viens de téléchargé mon site sur le serveur de production et j'obtiens l'erreur :
Warning: mysql_real_escape_string(): Access denied for user 'www-data'@'localhost' (using password: NO) in file.php on line 106
Warning: mysql_real_escape_string(): A link to the server could not be established in file.php on line 106
le code de la fonction est
include('./../inc/conn.php');
if(isset($_GET['query']))$q = clean($_GET['query']);
function clean($var){
return(mysql_real_escape_string($var));
}
le code de inc/conn.php :
try {
$dns = 'mysql:host=localhost;dbname=mydatabase';
$user = 'root';
$pw = 'rootpw';
$options = array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
$db = new PDO( $dns, $user, $pw, $options );
} catch ( Exception $e ) {
echo "Connection error : ", $e->getMessage();
die();
}
Je ne sais vraiment pas ce qui se passe car je n'ai aucun problème sur mon local dev d'ubuntu server. Mysql, apache et php version sont les mêmes. La seule chose c'est que j'utilise virtual host apache sur le serveur de prod. Ne sais pas ce qui se passe... il ya quelque chose que j'ai raté dans l'un des apache ou php-config ?
Modifier
Voici mon dossier est en droit de:
sudo ls -l /home/user/public/domain.com/www/
total 28
drwxrwxr-x 13 user www-data 4096 Aug 22 12:30 adodb5
drwxrwxr-x 2 user www-data 4096 Aug 22 12:30 ajax
drwxrwxr-x 2 user www-data 4096 Aug 22 12:31 css
drwxrwxr-x 9 user www-data 4096 Aug 22 12:33 gfx
drwxrwxr-x 2 user www-data 4096 Aug 22 12:33 inc
drwxrwxr-x 2 user www-data 4096 Aug 22 12:34 js
mon hôte virtuel apache config
<VirtualHost *:80>
# Admin email, Server Name (domain name), and any aliases
ServerAdmin [email protected]
ServerName www.domain.com
ServerAlias domain.com
# Index file and Document Root (where the public files are located)
DirectoryIndex index.html index.php
DocumentRoot /home/user/public/domain.com/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /home/user/public/domain.com/www>
Options FollowSymLinks
AllowOverride All
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin//usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
# Log file locations
LogLevel warn
ErrorLog /home/user/public/domain.com/log/error.log
CustomLog /home/user/public/domain.com/log/access.log combined
</VirtualHost>
Edit 2
Ok, donc le problème était que je n'avais pas www-data de l'utilisateur sur le serveur mysql. Donc j'ai juste ajouté l'utilisateur www-data sans mot de passe et aucun privilège dans mysql et cela fonctionne bien. Je le ferai dans l'avenir en essayant d'utiliser PDO citer autant oublié.
Merci pour tout le monde à essayer de m'aider.
mysql_real_escape_string
avec PDO
?À l'aide de la racine dans un serveur de production, hein?
Vous devriez avoir accès à l'environnement du serveur de production. Demander à l'admin si vous êtes utilisateur privilégié.
Je ne sais pas, c'est la première fois que je configurer un serveur de moi-même.. je doit créer un nouvel utilisateur mysql avec moins de privilèges ?
eh bien j'ai entendu, il est préférable d'utiliser cette fonction pour se faire chevaucher par injection de code sql. Devrais-je mieux d'utiliser htmlspecialchars ? La pensée s'était seulement une fonction php mais maintenant que j'ai découvert il besoin de connexion mysql
OriginalL'auteur Tamere Jlanik | 2013-08-22
Vous devez vous connecter pour publier un commentaire.
C'est parce que vous n'avez pas un www-data dans votre base de données mysql!
Vous pouvez ajouter la www-data de l'utilisateur par le biais de phpmyadmin, et donnent à l'utilisateur sans privilège et cela devrait fonctionner
oui. wtf???????
OriginalL'auteur yves
Vous pouvez soit utiliser PDO ou vous utilisez l'extension mysql, ne pas utiliser les deux en même temps.
mysql_real_escape_string
est une fonction de l'extension mysql. Il a besoin d'une connexion à la base de données pour fonctionner. Lors de l'appel, il tente d'établir une connexion si vous n'avez pas déjà d'en établir un à l'aide demysql_connect
, guestimating le nécessaire identifiants de connexion. Sur votre ordinateur local, vous apparemment n'ont pas de protection par mot de passe et le nom du compte de l'utilisateur MySQL est le même que le nom du serveur web s'exécute sous, il arrive à la chance de travailler. Sur le système de production, les informations d'identification sont différentes et il ne peut pas établir une connexion.Cesser d'utiliser
mysql_real_escape_string
avec PDO. Soit utiliser PDO de la chaîne, citant des fonctions ou, mieux, utilisation préparé et les requêtes paramétrées etbind
vos valeurs.mysql_real_escape_string
résout mon problème. juste ajoutermysql_connect('localhost', 'mysql_user', 'mysql_password');
dans certains où votre fichier de configuration après les connexions normales. Ou comme je vais le faire dans un proche avenir convertir tous lesmysql_real_escape_string´ to ´PDO::quote´ or
"lient"Sachez que c'est certainement pas! N'utilisez pas de
mysql_real_escape_string
si vous êtes en utilisant PDO! Période de!OriginalL'auteur deceze
mysql_real_escape_string
besoin d'un lien valide identifiant (retourné par lamysql_connect()
), voir http://php.net/manual/en/function.mysql-real-escape-string.phpVotre connexion est ouverte par PDO, donc vous n'avez pas de lien valide identifiant pour
mysql_real_escape_string
.Essayez d'utiliser
PDO::quote
Vérifiez votre nom d'utilisateur local, il existe en tant qu'utilisateur de mysql serveur de dev? Avez-vous un utilisateur www-data avec aucun mot de passe sur votre serveur de prod?
Non, il n'existe pas. Je pense que c'est pourquoi il n'est pas de travail. Ce genre de privilèges il faut que l'utilisateur ?
C'était le www-data de l'utilisateur manque ! Maintenant, c'est de travailler. Il semble donc AOP utilisation mysql_connect ?
PDO::quote() est une méthode d'instance et ne peut pas être appelée de façon statique.
Fatal error: Non-static method PDO::quote() cannot be called statically
OriginalL'auteur Oliver
J'ai eu le même problème lorsque vous essayez de modifier un utilisateur recherche dans le backend WordPress et la chose qui manque est une bonne connexion db (également mysql_real_escape_string() est obsolète).
Les variables globales sont définies dans wp-config.php.
C'est le travail de la fonction. Note $con variable.
Plus d'explications disponibles ici.
OriginalL'auteur Maija Vilkina
Ce problème survient généralement lorsque les connexions de base de données sont mis à mysqli,
pour résoudre ce problème et d'utiliser mysql_real_escape_string (), même si mysqli est réglé. Il suffit d'aller à php.ini et trouver:
mysql.default_user paramètre et réglez la valeur par défaut de l'utilisateur
par exemple : mysql.default_user = racine
et redémarrer apache, votre problème est résolu maintenant. profitez de
OriginalL'auteur Bhavin Jasani