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.

Pourquoi êtes-vous à l'aide de 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