2011-12-16 9 views
5

Delphi 2010を使用して、TSQLQueryとTSQLConnectionを使用してリモートのMySQLサーバーに接続しました。次のように私は、SQLクエリを使用していますSQLクエリの結果を取得するにはどうすればよいですか?

SQLQuery1.SQL.Text := 'SELECT * FROM registered WHERE email="'+email+'" and login_pass="'+password+'"'; 

SQLQuery1.Open; // Open sql connection 

私はこのクエリによって選択されたデータをリストまたは表示するために何をすべきか?私は

SQLQuery1['who']; // The resault is : James Kan 

を入力すると

私はそれがリスト内の最後の項目が表示されていると思います。しかし、私はPHPでforeachループを使うことができるので、各項目を表示したいと思います。たとえば、アイテムごとにTLabelを作成するにはどうすればよいですか?余談に注意したよう

+1

のような結果セットを反復、あなたはSQLのコーディング方法は、「SQLインジェクション」を可能にする通常の方法です。これはログインテーブルで行い、スマートユーザはテーブル全体を読むことができます。 「SQLパラメータ」、つまりemail =:emailとlogin_pass =:を使用する必要があります。 文字列を最初に「サニタイズ」せずに文字列を連結することは、ユーザーが「適切な」文字列を入力してクエリの意味を完全に変更できるため、危険です。 –

+0

パラメータを使用すると値がエスケープされますが、 'NULL'をフィルタリングする必要があります。また、LIKE句を使って '%'と '_'をフィルタします。 –

答えて

12

あなただけ

SQLQuery1.Open; 
SQLQuery1.First; // move to the first record 
while(not SQLQuery1.EOF)do begin 
    // do something with the current record 
    ... 
    // move to the next record 
    SQLQuery1.Next; 
end; 
+1

+1、あなたはより速くなりました。私は各行のラベルも作成したいと思っていました:) – TLama

+2

そして、クエリがすでにアクティブで最後のレコードであれば、ループの前に 'First'レコードに移動してください。 –

+0

あなたのアプリケーションがフリーズしたことが分かったら、簡単な間違いである「次へ」を忘れてしまいました。 –

関連する問題