表名是来自同一查询的变量(PHP)

时间:2016-06-24 02:09:44

标签: php mysql variables syntax

注意:我知道SQL注入的可能性等。这个问题是理论上的。

假设用户查询服务器上的页面,getListOfPeople.php,并将其用户ID作为post参数发送。

php页面包含以下内容(简化的伪代码):

$UUID = $_POST ["UUID"];

"SELECT name, bio, photo FROM people WHERE NOT EXISTS (SELECT blocked_UUID FROM 'name' WHERE blocked_UUID = $UUID)"

让我们说表是这样的:

NAME     BIO        PHOTO
BOB      blah blah  o43987h2fdof43hr43h
SARA     blah blah  098u43jfewoijfwoiej
MARK     blah blah  re988cd9sc2h33hfddh

BOB 如下所示:

blocked_UUID
287364
387761
497745
329844

我们希望为表中的人员提供对某些用户不可见的功能......因此他们只是将这些不需要的用户添加到他们自己的表中,其中包含被阻止的用户ID列表。

我的问题是,在查询中:

"SELECT name, bio, photo FROM people WHERE NOT EXISTS (SELECT blocked_UUID FROM 'name' WHERE blocked_UUID = $UUID)"

FROM' name' 的部分中,我试图弄清楚要使用的正确语法以便使其工作(查询表格)其中表名是从同一查询派生的变量。)

如果可能的话,我想避免完全不同的方法来解决问题,并坚持一个查询。

1 个答案:

答案 0 :(得分:2)

执行此操作的正确方法是使用单个blocks表:

name    blocked_UUID
BOB     287364
BOB     387761
SARA    123456
SARA    232323
MARK    112233

然后你的查询将是:

SELECT name, bio, photo 
FROM people 
WHERE NOT EXISTS (
    SELECT 1 FROM blocks
    WHERE blocked_UUID = $UUID
    AND blocks.name = people.name)