-1

すべてのユーザー入力が等しい行を取得しようとしていますが、複数のテーブルから値を取得しようとしています。

$query=
"SELECT * 
 FROM (client OR agent OR admin) 
 WHERE (first='".$mysqli->real_escape_string($_SESSION['first'])."' 
    AND last='".$mysqli->real_escape_string($_SESSION['last'])."' 
    AND password='".$mysqli->real_escape_string($_SESSION['pass'])."')";

これを行う方法はありますか?

4

1 に答える 1

1
<?php
$first = $mysqli->real_escape_string($_SESSION['first']);
$last = $mysqli->real_escape_string($_SESSION['last']);
$password = $mysqli->real_escape_string($_SESSION['pass']);

$query=
"SELECT *
 FROM client, agent, admin
 WHERE (client.first = '$fist' AND client.last = '$last' AND client.password = '$password')
 OR (agent.first = '$fist' AND agent.last = '$last' AND agent.password = '$password')
 OR (admin.first = '$fist' AND admin.last = '$last' AND admin.password = '$password')";

これがデータを取得する方法ですが、ここで、どのテーブルデータが存在するかを確認する必要があり、そのためにmysqli_fetch_fieldを使用できます。

usersところで、クライアント、エージェント、および管理者は、列typeまたはroleクライアント、エージェント、または管理者を表す1つのテーブルに格納できるため、データベーステーブルを再編成するオプションを検討してください。この方法は、データベースの正規化と呼ばれます。その後、クエリとデータのフェッチがはるかに簡単かつ高速になります。

于 2012-11-03T10:17:45.270 に答える