1

MySQLをデータベースとして使用し、ODBCをコネクタとして使用するASP.netWebアプリケーションの単純なログインを作成しようとしています。ここで、アプリケーション側のSQLの代わりにMySQLルーチンを呼び出すことにより、SQLインジェクションを防ぎたいと思います。

従来、SQLステートメントを実行してテーブルの結果を受け取り、それをデータクラスに格納できます。このようにして、データベースに再度クエリを実行しなくても、ロールなどのユーザープロパティにいつでも快適にアクセスできます。mysqlのプロシージャまたは関数を使用すると、完全なテーブルではなく、string、int、bitなどの単純な値しか返すことができないようです。したがって、完全なテーブルが必要な場合、2つのクエリを実行する必要がありますか?1つは、ログインが成功した場合にユーザーIDを返すストアド関数として、もう1つはユーザー情報用ですか?または、関数は完全なテーブルを返すことができますか?

4

2 に答える 2

1

まず、私はあなたの新しいアプローチに完全に同意します。SQLコードをアプリケーションから除外することは非常に良い考えです。

それはあなたのODBCドライバーに依存すると思います。経験から、 MySQL Connectorfor.Netを使用できることを知っています。ストアドプロシージャからデータセットを確実に取得できます。

于 2013-01-13T17:59:52.820 に答える
1

MySQL サーバーでテーブル値ストアド プロシージャを作成することはできません。MySQL Stored Function は、単一の値のみを返します。

ただし、関数が一連のデータを返す必要がある場合は、次の 2 つの選択肢しかありません。

  • 結果セットでいくつかのセパレーターを使用して文字列を作成し、それを呼び出し元に返すことができます。
  • もう 1 つの適切な代替手段は、Temporary Table を使用することです。

詳細はこちら

また、 mysql のドキュメントも参照してください。

于 2013-01-13T17:52:39.260 に答える