2011-06-01 19 views
5

Şu anda MySql kullanıyorum, ancak gelecekteki ispat yapmak için bir ODBC çözümü tercih ederim.ODBC veritabanı girişi nasıl kullanılır?

nasıl bir ODBC veritabanına geçirmeden önce kullanıcı girişi dezenfekte edebilirim?

, ben ona olduğum sürece, ben çift tırnak, örneğin benim dize sarın "INSERT INTO VALUES (description)" "- - ama metin çift tırnak işareti içeriyorsa ne olur?

+1

Eğer kullanıcı girişi ne tür demek? Örneğin, kullanıcı size çalışmak için soru soruyorsa, önünüzde çok iş var. Özel karakterlerden kaçmanın yanı sıra, SQL enjeksiyonu gibi güvenlik sorunlarına dikkat etmeniz ve muhtemelen kabul edilebilir ifadeleri de sınırlamak isteyebilirsiniz (örneğin, DDL'ye izin verin.) Öte yandan, kullanıcı size veri verirse ve uygulamanız veriyi veritabanına yazmak için ODBC kullanıyorsa, veri ve SQL ifadeleriniz karışmadığı için hiçbir şey yapmanız gerekmez. –

+1

[Delphi - SQL enjeksiyonuna karşı önlemin olası kopyası] (http://stackoverflow.com/questions/6000648/delphi-prevent-against-sql-injection) – Johan

+0

ODBC, ** gelecekteki ispatlamayı yapamaz. Yavaş ol, seçeneklerden sıyr ve arabayı yap. Herhangi bir sayıda alternatif yapacak, ZEOS yaklaşık 10 veritabanına bağlanabilir, bu yüzden ADO olabilir. – Johan

cevap

8

bir parametrized SQL cümle böyle

kullanmayı deneyin.

INSERT INTO MyTable (Field1,Field2) VALUES (:Param1,:Param2) 

çek kullanımı Using Parameters in Queries.

+0

+1 Örneği http://docwiki.embarcadero.com/CodeExamples/en/ADOQuery_%28Delphi%29 adresinden takip etmeye çalışıyorum ama '_latin1' ile ilgili bir istisna alıyorum. – Mawg

3

hibernate kullanın. Belki de delphi'den RMI yoluyla yapabilirsiniz. Bu java merkezli olsa da, neredeyse tamamen programcıyı yalıtmaktadır. altta yatan DB, ve çok daha fazla bahsettiğiniz sorunları ele alır ve çok daha fazlası.

btw, sorunuzu yanıtlamak için çift tırnak işareti, çift tırnak işareti içeren bir değer kaydetmek için çift çift tırnak gibi dışarı kaçının, örneğin

This is "my" text 

olarak kaydedilebilir olur 0
"This is ""my"" text" 
+0

-1, ilk ODBC, hazırda bekletme, kaç tane dolaylılık seviyesi istiyorsanız, sadece param ve yerel kodları kullanın. – Johan

8
  1. ODBC MySQL ile çalışmak için optimal bir yol değildir. Gelecekte birkaç DBMS'yi desteklemeniz gerekse bile, dbExpress (Delphi ile birlikte gelir) ve 3B parti de dahil olmak üzere çoklu DBMS veri erişim kitaplıklarını düşünebilirsiniz - AnyDAC (ticari), ZeosLib (ücretsiz), vb.
  2. Eğer MySQL sorgusu içine sabit bir dize yerine o zaman esacape the special characters gerekir veya hexadecimal representation içine dizeyi dönüştürmek gerekir. Bu sizi olası SQL enjeksiyonu ve sözdizimi hatalarından korur. Ancak sorgu hazırlama işlemini daha karmaşık hale getirir.
  3. iyi yolu - kullanım parametreleri ve parametre değerleri olarak değişmezleri gönderin. Bu basit ve güvenlidir.
İlgili konular