【发布时间】:2016-05-02 05:42:03
【问题描述】:
我有这个问题:
INSERT INTO table1 (col1)
SELECT :val
FROM table2 t2
WHERE t2.id = :id limit 1;
此查询检查t2.id = :id 是否为真,然后插入。现在我也想检查table3.id = :id。我想在这种情况下我必须使用JOIN。我该怎么做?
我这样传递参数:
$stm->bindValue(":val", $value, PDO::PARAM_STR);
$stm->bindValue(":id", $id, PDO::PARAM_INT);
注意:我知道我可以通过 FK 做到这一点。但我不想那样。
【问题讨论】:
-
您的
:val将始终是相同的值字符串,而不是安全列名,因此它与SELECT "some_string" FROM table2 t2相同 -
@Justinas 我不明白.. 你到底是什么意思?
-
我的意思是 PDO 会将您的列名转义为简单的字符串,结果您收到的是列名而不是列值。
-
如果你打印那个 SQL 语句,它看起来像这样'INSERT INTO table1 (col1) SELECT "fieldname" FROM table2 t2 WHERE t2.id = 1 limit 1'。您需要更改语句 '$sql = INSERT INTO table1 (col1) SELECT ' 。 $价值。 ' FROM table2 t2 WHERE t2.id = :id limit 1'
-
@stack 不,我的意思是参数绑定仅适用于实际参数,而不适用于列/表名