MySQLi & mysql_real_escape_string() Erreurs
Je suis en utilisant la programmation orientée objet MySQLi pour se connecter à ma base de données. J'ai vérifié mes informations d'identification et tout est bon pour aller.
$mysqli = new mysqli(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_DB) or die('There was a problem connecting to the database.');
if (mysqli_connect_errno()) {
printf("Can't connect to MySQL Server. Errorcode: %s\n", mysqli_connect_error());
exit;
}
if ($result = $mysqli->query('SELECT * FROM places WHERE place_id=' . mysql_real_escape_string($_GET['id']))) {
while( $row = $result->fetch_assoc() ){
printf("%s (%s)\n", $row['name'], $row['place_id']);
}
$result->close();
}
$mysqli->close();
Ce code génère une erreur:
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access
denied for user '-removed-'@'localhost' (using password: NO) in
/var/www/vhosts/communr.com/httpdocs/pbd/places.php on line 396
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to
the server could not be established in
/var/www/vhosts/communr.com/httpdocs/pbd/places.php on line 396
Je ne peux pas comprendre pourquoi j'obtiens ces erreurs. Ils ont commencé à montrer quand j'ai déménagé serveurs récemment. Je suis en train de créer une connexion SQL avant de la requête.
Avez-vous tous pense que certains peut être foiré sur mon nouveau serveur?
Merci!
Ce qui est étrange pour moi, c'est que si je ne
'SELECT * FROM places WHERE place_id="' . mysql_real_escape_string(1354) . '"'
j'ai des erreurs, si je ne 'SELECT * FROM places WHERE place_id="1354"'
- je obtenir le résultat attendu.
OriginalL'auteur ATLChris | 2011-02-22
Vous devez vous connecter pour publier un commentaire.
mysql_real_escape_string
nécessite une connexion viamysql_connect
pour travailler.$mysqli->real_escape_string
nécessite unmysqli
objet de travail. Donc,Utilisation
MySQli::real_escape_string
à la place:Mais notez que vous aurez besoin de devis pour être sûr:
Cependant, depuis qu'il ressemble à un entier, vous devez la lancer en tant que tel, au lieu de prendre la fuite:
Oui, cela a fonctionné. Merci ircmaxwell & Capsule, vous avez le droit aussi. C'est bizarre, ça marchait très bien sur mon ancien serveur.
casting pour un int produira toujours un int. Si
$_GET['id']
est vide, il va revenir0
. Il est donc préférable de ne pas le citer comme à l'époque de la DB aurais besoin de faire un type d'amputation plutôt que de PHP...Désolé, mon mauvais. J'ai l'habitude des valeurs de filtre avant la coulée de petites choses au hasard pour ce que j'en ai vraiment besoin, juste pour éviter l'interrogation de la base de données pour rien. De toute façon, il serait intéressant de banc d'essai, lequel est le plus rapide lors de la coulée, PHP ou MySQL 😉
Simple. Parce que comment vous échapper dépend du contexte sur les paramètres que vous utilisez actuellement pour la connexion mysql. Selon les préférences et les paramètres que vous définissez, il échappera à la chaîne différemment. Par exemple, disons que vous réglez le jeu de caractères à
ISO-8859-1
, il va s'échapper0xbf27
comme0xbf5c27
, mais si vous définir le jeu de caractères àGBK
, il s'échappe comme0x5cbf5c27
. Car on va créer un personnage invalide flux, et les autres ne le seront pas. Vérifier ceci...OriginalL'auteur ircmaxell