0

我正在尝试使用子查询插入一行,该查询获取其中一列的数据。但是,PDO 向我抛出了一个异常。我基本上在做的是将参数列表中的一个问号 [?] 与子查询绑定。

以下是异常的一小段摘录:

        [1] => Array
            (

                [line] => 147
                [function] => query
                [class] => prepared_statements
                [type] => ->
                [args] => Array
                    (
                        [0] => INSERT INTO columns(Name,Column_Type,Is_Permanent) Values(?,?,?)
                        [1] => Array
                            (
                                [0] => s
                                [1] => (SELECT Id FROM column_type WHERE Name=\'List_Options\')
                                [2] => 0
                            )

                    )

            )

难道我做错了什么?我最好的猜测是我们不能将子查询绑定为参数?

谢谢你经历了这一切。

4

2 回答 2

3

您只能将单个标量值绑定到查询参数。即,单个字符串、日期或数字。

参数不能用于替代子查询、SQL 表达式、值列表、SQL 关键字、列名或表名。

于 2013-08-15T01:55:03.783 回答
2

不能也不必将子查询作为参数传递。

为了实现您的目标,您可以将其作为查询的一部分并且仅作为标量参数。您的查询可能看起来像

INSERT INTO columns (Name, Is_Permanent, Column_Type) 
SELECT ?,?, (SELECT Id FROM column_type WHERE Name=\'List_Options\')

这是SQLFiddle演示

column_type或者如果您还需要作为参数传递

INSERT INTO columns (Name, Is_Permanent, Column_Type) 
SELECT ?,?, (SELECT Id FROM column_type WHERE Name = ?)

这是SQLFiddle演示

于 2013-08-15T01:58:13.667 回答