2009-04-07 8 views
0

Je reçois cette erreur lorsque j'essaie de mettre à jour des données dans la base de données. ceci est mon fichier database.phpErreur 'ODBC' @ 'localhost' lors de la mise à jour

<?php 

$db_name = "db"; 
$db_server = "localhost"; 
$db_user = "xxxx"; 
$db_pass = "zzzzzzzzz"; 

$mysqli = new MySQLi($db_server, $db_user, $db_pass, $db_name) 
or die(mysqli_error()); 

?> 

update.php

<?php 

require 'database.php'; 

$title = mysql_real_escape_string($_POST['title']); 
$id = mysql_real_escape_string($_POST['id']); 

$update_query = "UPDATE photos SET title = '$title' WHERE id='$id'"; 

$result = $mysqli->query($update_query) or die(mysqli_error($mysqli)); 

if ($result) { 
    echo "Success!"; 
    echo "The title of this photo has been changed to: <strong>$title</strong>"; 
} 

?> 

Le message d'erreur:

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\wamp\www\myPhotosWebsite\changePhotoTitle.php on line 5 

Répondre

1

Vous mélangez des appels de style procédural et orienté objet.

Essayez:

$title = $mysqli->escape_string(_POST['title']); /* Call as a method */ 

au lieu de:

$title = mysql_real_escape_string($_POST['title']); 

real_escape_string nécessite une connexion valide, car il a besoin de connaître le caractère de connexion ensemble.

Si vous l'appelez comme une procédure, vous devez passer la poignée de connexion comme le premier paramètre:

mysql_real_escape_string($connection_handle, $string_to_escape) 

ou tout simplement l'appeler comme un procédé tel que décrit ci-dessus.

Voir mysqli_real_escape_string pour plus de détails

0

Dans votre mysql connect(), il semble que votre nom d'utilisateur/mot de passe combinaison se voit refuser l'accès à mysql, vous voudrez peut-être vérifier vos coordonnées et réessayer.

0

mysql_real_escape_string nécessite une connexion de base de données pour fonctionner avec. À moins d'en avoir explicitement passé un, cela signifie que vous devez d'abord appeler le mysql_connect(). Mais vous utilisez un objet MySQLi() pour obtenir la connexion à la place. Je ne pense pas en utilisant MySQLi() va définir la connexion par défaut mysql_ fonctions de la famille. Certainement,

(using password: NO) 

implique qu'il n'obtient pas le $ db_pass.

Il est préférable de s'en tenir à 'mysql' ou 'mysqli', plutôt que d'essayer de mélanger les deux. Si vous utilisez MySQLi, vous pouvez utiliser les instructions paramétrées pour éviter d'avoir à appeler explicitement $mysqli->escape_string().

PS.

echo "The title of this photo has been changed to: <strong>$title</strong>"; 

$ title est protégé par un échappement SQL, mais pas par HTML. Il aura des barres obliques inverses indésirables tout en n'empêchant pas l'injection HTML (attaques XSS). À la place:

echo 'The title of this photo has been changed to: <strong>'.htmlspecialchars($_POST['title']).'</strong>'; 
Questions connexes