問題タブ [database-agnostic]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - この SQL クエリ コードは、ユーザー入力によってどのように壊れたり悪用されたりする可能性がありますか?
重複の可能性:
一重引用符をエスケープし、ユーザー入力を一重引用符で囲むことにより、SQL インジェクションから保護できますか?
位置パラメーターを使用してクエリを実行しない従来のアプリがあり、どこにでも SQL があります。ユーザー入力にはアポストロフィが含まれる可能性があるため、すべての文字列入力は手動でアポストロフィをエスケープする必要があると (ここで説明する前に) 決定されました。
これは、簡単に使用できるように C# に変換された、本質的な元のコード (私が作成したものではありません) です。
これは何らかの方法で壊れる可能性があるようですが、ユーザー入力によってどのように悪用される可能性があるかについては途方に暮れています。ユーザー入力は に到達するまでフィルタリングされていないと仮定_IsValidLogin
し、パスワードがプレーンテキストで保存されているように見えることを忘れてください。
それを完全に強化するための解決策は明らかです-位置パラメーターを使用します-しかし、このコードが安全でない理由/方法を経営陣に示すための弾薬が必要なので、修正するために時間/費用を割り当てることができます.
注:これは壊れている可能性があると想定していますが、実際にはそうではない可能性があります。私は SQL のスーパースターではありません。
注 2: この質問はデータベースにとらわれないと言いましたが、このコードを特定のエンジンで利用できる場合は、貢献を歓迎します。
database-design - いずれかのテーブルで子レコードを保証しますが、両方では保証しませんか?
2 つの子テーブルを持つテーブルがあります。親テーブルのレコードごとに、子テーブルの 1 つに 1 つのレコードだけが必要です。それを定義するにはどうすればよいですか?
これが裏話です。この実装を批判するのは自由ですが、私が遭遇したのはこれだけではないので、上記の質問に答えてください:
ユーザー調査に関するデータを保持するデータベースがあります。元々、調査を開始するための 1 つの認証方法で設計されていました。それ以来、要件が変更され、現在、誰かがサインオンして調査を開始する方法は 2 つあります。
もともと、調査テーブルの列に認証トークンをキャプチャしました。要件が変更されたため、認証で取得したいデータが他に 3 つあります。したがって、調査テーブルの各レコードに対して、トークンを 1 つ、または 3 つのセットにすることになります。これらの 4 つすべてが異なるタイプであるため、私の考えでは、1 つが null になる、または 3 つが null になる 4 つの列 (またはさらに悪いことに、これらのシナリオのいずれかの悪いマッシュアップ) の代わりに、 1 つの認証トークンを保持するための 1 つと、3 つを保持するための 2 つの子テーブルがあります。問題は、DDL でそれを定義する方法がわかりません。
私は MySQL を使用しているので、これを可能にする機能が MySQL に実装されていない可能性があります。
cakephp - CakePHP 複数のネストされた結合
モデルのいくつかが hasMany/belongsTo 関連付けによってリンクされているアプリがあります。したがって、たとえば、A は B が多く、B は C が多く、C は多くが D であり、D は E が多くあります。また、E は D に属し、D は C に属し、C は B に属し、B は A に属します。各クエリで返される情報量を制御するのに最適ですが、テーブル D を含む条件を使用しているときにテーブル A からデータを取得しようとすると問題が発生するようです。たとえば、ここに私の 'A' の例を示します。モデル:
これでも「A」のすべてのレコードが返されます。関連する「E」レコードが条件を満たさない場合は、次のようになります。
If 'E.myfield' != $some_value の場合、レコードを返してほしくありません。
これが私の問題を十分に明確に表現していることを願っています...
基本的に、次のクエリが必要ですが、データベースに依存しない/CakePHP-y のような方法で:
sql - この動作はすべての主要なデータベースに存在しますか?
number='number'
それは他のデータベースにも当てはまりますtrue
か?
mysql - エンティティ フレームワークとデータベースに依存しないプログラミング、可能性は?
Entity Framework (.NET 4.0) を使用して、Sql Server、MySQL、および Oracle を処理できるアプリケーションを構築したいと考えています。そして多分 Sqlite も。
構成ファイルの設定によって、db ベンダーを簡単に切り替えることができます。
これは可能ですか?私は実際の例が好きです!
どのようなプロバイダーを使用しましたか?
sql - レコードセットに表示されないフィールドでDISTINCTを選択しますか?
したいのですが、レコードセットに表示しSELECT DISTINCT guid, ...
たくありませんguid
。どうすればよいですか?
sql - SQLの範囲に従ってレコードをグループ化する方法
こんにちは、範囲に従ってレコードをグループ化する SQL を作成したいと思います
たとえば、私が持っているとします
ここで、「Number」の範囲に従ってレコードを取得する必要があります: [100,200),[200,300),[300,400) and [0,400]
。範囲ごとに、最新の「時間」の「価格」が必要です
したがって、結果は
これを生成する SQL ステートメントを作成するにはどうすればよいですか?
私は特定のデータベースに取り組んでいません。だから私は特定のデータベースSQLステートメントを探していません
sql - SQL のロギング テーブルに適したクエリとインデックス
「log」という名前のテーブルがあるとします。その中には巨大なレコードがあります。
アプリケーションは通常、単純な SQL によってデータを取得します。
logLevel
およびcreationData
インデックスがありますが、レコードの数によってデータの取得に時間がかかります。
どうすればこれを修正できますか?
sql - 元の文字列の大文字と小文字を格納することで、データベースの大文字と小文字の区別の問題を回避するのはおかしなことですか?
複数のテーブルが候補キー (例: ユーザー名) として文字列データを持ち、それに応じてインデックスが作成されるデータベースを実装しています。私が欲しいこれらのフィールドについて:
誰かがそれらのキーでテーブルをクエリするときの大文字と小文字の区別なし
アプリケーションが元のケースを使用してユーザーにデータを表示できるように、最初に書き込まれたケースを何らかの方法で保存する必要があります。
また、アプリケーション コードは特定の RDBMS に依存しない (またはすべきでない) ため、データベース スキーマを可能な限りデータベースに依存しないようにしたいと考えています。
また、データベースで実行されるクエリの大部分は、クライアントによるテーブルへの直接アクセスではなく、アプリケーション コードによって実行されることにも注意してください。
これを実装する際に、私は多くの厄介な問題に遭遇しています。1 つは、すべての RDBMS が同じ方法で COLLATE を実装しているわけではないことです (大文字と小文字の区別がスキーマ レベルで調整可能であると思われる場合)。もう 1 つの問題は、照合順序と大文字と小文字の区別のオプションを複数のレベル (サーバー、データベース、テーブル (?)、列) で設定できるため、アプリケーションがどのような設定になるかを保証できないことです。さらに別の問題は、単に大文字と小文字を区別するだけでなく、COLLATE 自体が複雑になる可能性があることです (例: Unicode オプション)。
これらの頭痛の種をすべて回避するために、私が考えているのは、1 つのデータに対して 2 つの列を格納することで、この問題を完全に回避することです。1 つの列は元の大文字を使用し、もう 1 つの列はアプリケーション層によって小文字に変更されました。
例: テーブル内の 2 つのフィールド
私が見ているように、これの長所と短所は次のとおりです。
長所:
あいまいさはありません。アプリケーション コードが大文字と小文字の変換を管理し、基になる RDBMS/設定が変更されたときに単体テストが「不可解に」失敗することを心配する必要はありません。
インデックスの検索はクリーンであり、照合機能や LOWER() などの呼び出しによって速度が低下することはありません (そのようなことがインデックスの速度を低下させると仮定すると、これは論理的に思われます)。
短所:
倍増したデータに必要な追加のストレージ容量
ちょっと野蛮に見える
私はそれがうまくいくことを知っていますが、同時にそれは間違ったにおいがします.
これを行うのは非常識ですか/無意味ですか? 大文字と小文字の区別の問題を、現時点で私が思っているよりも簡単にする、私が知らない何かがありますか?
php - コードが未定の列数を格納できるようにする方法は?
私の質問は不明確かもしれませんが、例を挙げて説明しようと思います。
約 100 種類の車のモデルがあるとします。明らかにすべての車が共通の部品または仕様を共有していますが、すべての部品がこれら 100 の車のブランドすべてで共有されているわけではありません。
この場合、これらの仕様を保存するベストプラクティスは何ですか??
私の考えは、最も一般的な仕様を各列に保存し、未決定の(残りの)仕様をオブジェクトまたは配列として保存またはシリアル化することでした。
教義はこれらのデータ型(配列オブジェクト)によってこの操作を簡素化します、これは良い考えだと思いますか、それともあなたの経験を私と共有してもらえますか
これが2つの単純な表での私の考えです
検索機能が壊れているので、私の考えは悪いと思います