Frage

Ich habe diesen Code:

$query = "select id from votes where username = '$user' and article_id  = $this->id";

Ich habe versucht, diesen Code, es zu sanieren:

$query = sprintf("select id from votes where username = '$user' and article_id = $this->id", 
    mysql_real_escape_string($user), 
    mysql_real_escape_string($password));

aber ich habe diesen Fehler für die mysql_real_escape Zeilen:

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'mexautos'@'localhost' (using password: NO) in /home/mexautos/public_html/kiubbo/data/article.php on line 145 Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /home/mexautos/public_html/kiubbo/data/article.php on line 145 Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'mexautos'@'localhost' (using password: NO) in /home/mexautos/public_html/kiubbo/data/article.php on line 146 Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /home/mexautos/public_html/kiubbo/data/article.php on line 146

ich hier die Benutzername, ich weiß nicht, ob sein sicher genug:

function getUsername(){ return $this->username; }

Thx

War es hilfreich?

Lösung

würde ich vorschlagen, vorbereitete Anweisungen für diese statt sprintf

Andere Tipps

Sie müssen eine MySQL-Verbindung, bevor Sie mysql_real_escape_string verwenden können.

Nicht sicher, ob dies ist, was ist dein Problem verursacht, aber ich glaube, dass die Variablen in der sprintf Anweisung nicht ‚$ user‘ und ‚this-> id $‘ sein sollten, aber sie sollten ‚% s‘ sein

http://us2.php.net/sprintf

  

Achtung: mysql_real_escape_string ()   [Function.mysql-real-escape-string]:   Zugang für Benutzer verweigert   'Mexautos' @ 'localhost' (mit   Kennwort: NEIN)

     

Achtung: mysql_real_escape_string ()   [Function.mysql-real-escape-string]: A   Verbindung zum Server konnte nicht sein   etabliert

Haben Sie die Verbindung? Ist es aktiv? Sie müssen vor dem mysql_real_escape_string () zu verwenden, verbunden werden Sie nicht vergessen, das Passwort zu setzen?

Versuchen:

mysql -u mexautos -p

(Typ eingeben, wenn kein Passwort)

Überprüfen Sie auch, Ihre sprintf () Funktion, müssen Sie die% s verwenden zu binden Ihre Variable

$a = 'Foo';
$b = 'Bar';
$foo = sprintf('Foo Bar %s %s', $a, $b);

Sie müssen eine Verbindung mysql_real_escape_string () zu verwenden, da es die Server-Codierungstyp verwendet santitize zu helfen.

Auch die sprintf () sollte in etwa so aussehen

$query = sprintf("SELECT id FROM votes WHERE username = '%s' and article_id = %d", 
    mysql_real_escape_string($user), 
    mysql_real_escape_string($password));

Ich würde empfehlen, eine reife DB-Abstraktionsschicht verwendet wie Zend_Db (es gibt Tonnen von ihnen gibt). Ihre eigene Homebrew-Lösung Die Implementierung ist nicht etwas, was ich für ein Produktionssystem empfehlen würde.

Wie die anderen gesagt, nicht '$ user', sondern '% s', und Sie müssen eine offene Verbindung.

@Tomalak sprintf ist schneller - das ist der Grund, warum es zu benutzen -. es ist eine native C-Funktion

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top