データベースから顧客のファイルを取得し、ファイルが見つかった場合はパスワードを返すことになっている状況がありますが、入力された顧客 ID が見つからない場合は「NOT FOUND. "
次のような if ステートメントとして設定しようとしていました。
しかし、コードの実際の部分として「何でも」を割り当てることについて、どのように正確に行えばよいかわかりませんでした。これを行う方法はありますか、それとも私が行っている方法を完全に再評価する必要がありますか?
データベースから顧客のファイルを取得し、ファイルが見つかった場合はパスワードを返すことになっている状況がありますが、入力された顧客 ID が見つからない場合は「NOT FOUND. "
次のような if ステートメントとして設定しようとしていました。
しかし、コードの実際の部分として「何でも」を割り当てることについて、どのように正確に行えばよいかわかりませんでした。これを行う方法はありますか、それとも私が行っている方法を完全に再評価する必要がありますか?
IFNULLを使用してこのようなことを行うことができますが、実際には、コード内の NULL を検出して「ユーザーなし」状態に対処する方が適切です。
SELECT IFNULL(password, 'NOT FOUND') AS password
FROM yourtable
WHERE customerid=XXX;
他の人が指摘しているように、問題は、欠落しているユーザー レコードと、パスワードとして「NOT FOUND」が含まれているユーザー レコードの違いがわからないことです。これによる影響は無害かもしれませんが、将来的に悪用可能な状態になる可能性もあります。ユーザー入力のチェックに関しては、何も信用しないでください :)
サブクエリと を使用して、SQL でこれを行うことができますcoalesce()
。以下はデータ構造の推測ですがNOT FOUND
、何も見つからない場合に返す方法を示しています。
select coalesce((select f.password
from files f
where f.customerId = $CustomerId
), 'NOT FOUND')
注: これは、特定の顧客 ID を持つファイルが最大 1 つであることを前提としています。そうでない場合は、「サブクエリが複数の値を返します」のようなエラーが返されます。