mysql_real_escape_string() Fehler

Ich hoffe ihr könnt mir weiter helfen. Ich nutze mysql_real_escape_string() und dabei wird mir immer ein Fehler angezeigt:

Warning: mysql\_real\_escape\_string() [function.mysql-real-escape-string]: Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\xampp\htdocs\violators\sites\daten\daten\_charakterdaten.php on line 12

Folgendermaßen sieht meine connect.php aus:

<?php $DB_Location = 'mysql:dbname=violators;host=localhost';<br />$DB\_User = 'root';
$DB\_PW = '';
try
{
 $objDb=new PDO($DB\_Location, $DB\_User, $DB\_PW);
}
catch (PDOException $e)
{
 echo 'Fehler beim Öffnen der Datenbank: ' . $e-\>getMessage();
}
?\>

Mein Quelltext, wo der Fehler auftritt:

include('./sites/datenbank/connect.php');
$dbSelect = $objDb-\>prepare("SELECT \* FROM `charakter` WHERE `User`= :User LIMIT 1;");
$dbSelect-\>bindParam('User', mysql\_real\_escape\_string($User));
$dbSelect-\>execute();
if($row=$dbSelect-\>fetch())
{
 $Art=$row['Art'];
 $BN=$row['BN'];
}

das liegt an dem Befehl
siehe http://de.php.net/mysql_real_escape_string

es wird die letzte verbindung genommen , sprich wenns geht die verbindung angeben beim 2 parameter .

string mysql\_real\_escape\_string ( string $unescaped\_string [, resource $link\_identifier] )

[, resource $link_identifier]
fals keine solche Verbindung gefunden wird, wird versucht, eine Verbindung aufzubauen,

Ja, das hatte ich auch gelesen, aber ich dachte, es reicht, wenn die Verbindung steht?!
Was kann ich machen, da ich ja gar kein mysql_connect() nutze, sondern mit PDO arbeite?
Danke!

Es funktioniert, wenn ich mysql_connect zu meiner connect.php hinzufüge, aber dann ist die Verbindung zur DB immer aktiv, oder? Ist das nicht etwas unsicher?

<?php $DB_Location = 'mysql:dbname=violators;host=localhost';<br />$DB\_User = 'root';
$DB\_PW = '';
try
{
 $objDb=new PDO($DB\_Location, $DB\_User, $DB\_PW);
 $link=mysql\_connect('localhost', $DB\_User, $DB\_PW);
}
catch (PDOException $e)
{
 echo 'Fehler beim Öffnen der Datenbank: ' .
$e-\>getMessage();
}
?\>

warum willst du die strings überhaupt noch escapen?
dadurch das du die PDO Schnittstelle benutzt ist für die SQL Abfragen eigentlich keine escape function von nöten.

Gruß

Ach so. Ich dachte, dass man das wegen der Sicherheit noch machen müsste, damit bei Usereingaben keine SQL-Injektionen stattfinden können.
Also reicht es, wenn ich die Abfragen mit PDO mache?!

Danke!

ja,
auszug phpdoku PDO:

Die Parameter für Prepared Statements müssen nicht maskiert werden. Der Treiber übernimmt das für Sie. Wenn Ihre Anwendung ausschließlich Prepared Statements benutzt, können Sie sicher sein, dass keine SQL-Injection auftreten wird. (Wenn Sie aber trotzdem andere Teile der Abfrage aus nicht zuverlässigen Eingaben generieren, sind Sie immer noch gefährdet.)

Gruß

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]