2012-09-07 5 views
5

Mögliche Duplizieren:
Php PDO::bindParam data types.. how does it work?PDO: Was ist der Zweck der Verwendung von data_type während der Bindung?

zum Beispiel sagen, dass ich die folgende vorbereitete Erklärung haben:

$sth = $dbh->prepare('SELECT `name` FROM `user` WHERE `user_id` = :user_id'); 

ich den user_id Parameter wie so binden könnte:

$sth->bindValue(':user_id', $user_id_value); 

Und ich wäre immer noch vor SQL-Injektionen sicher.

BindValue() ist jedoch auch ein optionaler Parameter namens data_type, mit dem Sie einen expliziten Datentyp festlegen können. Beispiel:

$sth->bindValue(':user_id', $user_id_value, PDO::PARAM_INT); 

Das erlaubt mir zu sagen, dass user_id eine ganze Zahl ist.

Meine Frage ist: Warum verwenden Sie den Parameter data_type in bindValue, wenn Sie gegen SQL-Injektionen mit oder ohne es sicher sind? Ist es da, um die Datenintegrität zu erzwingen? Wenn Sie Ihre Daten vorher validieren, müssen Sie sich darum sorgen, sie zu verwenden? Gibt es andere Vorteile für die Verwendung, an die ich nicht gedacht habe?

Antwort

-1

Grundsätzlich - ja. Enforcing data_types ist eine gute Sache.

Nehmen Sie keinen Schutz vor Injektionen an - vor langer Zeit sah ich einen Blog-Post, der die Injektion mit utf8-Code für Back-Ticks und Zitate und was nicht beschreibt; die, obwohl nicht entkamen, wo als einzelne Zeichen ausgewertet und somit Injektion erlaubt.

Das ist nicht, zu sagen, dass dies nicht angesprochen worden ist, noch ich sage, Sie sind anfällig - nur unter der Annahme, sagen will, ist manchmal nicht das Beste, was zu tun ...

+2

Welchen Teil der Frage beantworte Sie? Ich sehe immer noch keine Argumentation außer "es ist eine gute Sache", was überhaupt keine technische Erklärung ist. – zerkms

+0

ähm ... du hast gefragt, ob es da ist, um die Integrität des Datentyps zu erzwingen. wenn du es nicht benutzen willst, tu es nicht. Ich benutze es, weil ich diese zusätzliche Ebene der Durchsetzung mag. - jedes kleine hilft [wie meth Benutzer sagen würden] –

+1

Ich bin kein OP. Aber dennoch - "weil ich diese zusätzliche Ebene der Durchsetzung mag" - ist keine technische Erklärung. Können Sie ein Beispiel geben, wo diese zusätzliche Ebene der Durchsetzung wirklich nützlich sein kann, und es gibt Unterschiede mit und ohne explizite Typspezifikation? – zerkms

Verwandte Themen