1

AJAX (PHP バックエンド) 経由でデータベースにクエリを発行したいと考えています。Company、Users、Invoices、Invoice_Lines の 4 つのテーブルがあります。重要な関係は次のとおりです。

Users.Company_ID -> Companies.ID
Invoices.Company_ID -> Companies.ID
Invoice_Lines.Invoice_ID -> Invoices.ID

送信された SQL クエリをコンポーネント (列、テーブル、および条件) に分割する単純なパーサーを PHP で作成しました。

ユーザーがクエリを直接記述できるようにしたいのですが、SQL サーバーに送信する前にそれらを変更して、ログインしているユーザーの会社 ID によってすべての情報が制限されるようにします。例えば:

SELECT Users.ID, Users.Name, Users.Email
FROM Users

クエリを次のようにしたいと思います。

SELECT Users.ID, Users.Name, Users.Email
FROM Users
WHERE Users.Company_ID = X

より複雑な例では:

SELECT Invoice_Lines.Subtotal
FROM Invoice_Lines
WHERE Invoice_Lines.Invoice_ID = 4

なる

SELECT Invoice_Lines.Subtotal
FROM Invoice_Lines
INNER JOIN Invoices ON (Invoice_Lines.Invoice_ID = Invoice.ID)
INNER JOIN Company ON (Invoice.Company_ID = Company.ID)
WHERE Invoice_Lines.Invoice_ID = 4 AND Company.ID = X

既に記述されているステートメントと競合しないテーブル エイリアスを作成する必要があることは明らかです。クエリを分析して、入力を制限する最も効率的な方法を決定する方法がわかりません。

SQL のサブセットのみをサポートする予定です (エイリアスを使用した直接テーブル列、テーブルとエイリアスを使用した左結合および内部結合、単純な where 式)。

4

1 に答える 1