web-dev-qa-db-ja.com

データベースクエリwhere()値は数値

ご存知のように、データベースクエリで定義されている値は、Joomlaでは常に$db->quote($value)を使用してエスケープする必要があります。

数値を変数として定義する場合、通常は_(int)_を使用して整数として設定します。

では、データベースクエリのwhere()句の値として数値を設定する場合はどうすればよいでしょうか。次のように整数としてのみ定義しますか?

_$id = (int)555;
->where($db->quoteName('id') . ' = ' . $id);
_

または、次のように引用するだけですみます。

_$id = 555;
->where($db->quoteName('id') . ' = ' . $db->quote($id));
_

または私たちは両方を行うでしょうか?

_$id = (int)555;
->where($db->quoteName('id') . ' = ' . $db->quote($id));
_

誰かが私が将来の参照のために知っているようにちょうどいくつかの光を当てることができますか?

6
Lodder

これは良い質問です。私も何度もこの問題に取り組んできました。正しい答えが1つあるかどうかわからない。また、私の答えが完全に正しく、明確に説明されるかどうかもわからない。

これまで見てきたことから、比較するフィールドが(INT)、(TEXTとして定義されていても)、(VARCHAR)または(CHAR)タイプ、引用符付きまたは引用符なし。

ただし、このような場合の重要なポイントの1つは、適切なデータ型でデータベースをクエリするときに一貫性を保つことです。したがって、INTフィールドをチェックする場合、クエリに含まれる変数は常に整数に変換する必要があります。

これを行い、整数をデータベースに渡すことで、送信するデータについてはある程度安全です...データベースはクエリを理解して処理します。

このケースでの私のテストから、私の一般的な結論は、整数を引用しても結果と全体の安定性に違いはないということです。 (現時点で私が考えることができない特定のケースがない限り、整数を引用するかしないかによって、異なる結果または望ましくない結果が生じます)。つまり、コーディングスタイルとコードの一貫性のほうが重要であるように見えます。

上記を考慮すると、整数を引用する必要は実際にはないようです。

Joomlaコア全体でこれを調査し、彼らの実践を広範囲に見たり、このトピックに関する広範な知識と経験を持つ人からの意見を得るのは興味深いでしょう。

3
FFrewin