hawkmaster: PDO Fragen, Sicherheit? Prepared Statements?

Beitrag lesen

Hallo,
seit gestern lese ich nun einige Manuals und Code Beispiele zu PDO und habe auch selbst schon ein wenig ausprobiert.
Dennoch habe ich ein paar grundsätzliche Fragen.

1.
Oft sieht man im Code die Funktion getMessage()
echo $e->getMessage();
Ich habe nirgend einen Hinweis dazu gefunden. Ist das eine spezielle Methode von PDO oder eine allgemeine Funktion von PHP?

2.Prepared Statements
---------------------------------------------------------------
$stmt->bindValue(1,$_POST['plz1'],PDO::PARAM_STR);
$stmt->bindParam(':animal_id', $animal_id, PDO::PARAM_INT);
$stmt->bindParam(':animal_name', $animal_name, PDO::PARAM_STR, 5);
---------------------------------------------------------------

Warum sind hier die Konstanten angegeben bzw. was bewirken diese?

Was bedeutet die zahl 5 hinter "PDO::PARAM_STR, 5" ?

man könnte doch auch einfach den bind so machen, oder?
$dbInsertLog->bindParam('message', $strNachricht);

3.Sicherheit
Wird bei Prepared Statements automatisch auch gefiltert? Somit immer sicher gegen SQL Injection?
Beispiel:
Wäre das automatisch abgesichert?
------------------------------------------------------------------
$dbInsertLog = $objDb->prepare("INSERT INTO login (username, password) VALUES (:username, :pass)");
$dbInsertLog->bindParam('username', $_POST['username']);
$dbInsertLog->bindParam('pass', $_POST['pass']);
-----------------------------------------------------------

Wie wäre eine Lösung mit "quote()"?
Genauso sicher?
------------------------------------------------------
$dbh->exec("INSERT INTO REGISTRY (name, value)
VALUES (".$dbh->quote($name,PDO::PARAM_STR).", ".$dbh->quote($value,PDO::PARAM_INT).")");
-------------------------------------------------

4. Fehlerausgaben
Bisher habe ich immer "mysql_error() gearbeitet.

$sql = mysql_query("SELECT Config FROM directories WHERE Name = 'Directories'") or mysql_error();

Um bei PDO Fehler (z.b. flascher Spalten namen) ausgeben zu können, muß man hier immer mit "try" und "catch" arbeiten?
try {
...
dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
...
}
catch(PDOException $e)
    {
    echo $e->getMessage();
    }

oder kann man auch sowas machen:
$dbResult = $objDb->query("SELECT * FROM log") or print_r($dbh->errorInfo());

Vielen Dank für die Hilfe
Gruss
hawk