参数化嵌套查询

时间:2015-11-09 23:07:47

标签: mysql

我正在尝试使用嵌套选择参数化以下插入。

INSERT IGNORE INTO table1 (creation_timestamp, str1, str2) 
    (SELECT now(), "param1", str2 FROM table2 WHERE key = "param2");

我想要像

这样的东西
INSERT IGNORE INTO table1 (creation_timestamp, str1, str2) 
    (SELECT now(), ?, str2 FROM table2 WHERE key = ?) 
    VALUES ("param1", "param2");

任何人都知道如何才能完成这样的事情?

2 个答案:

答案 0 :(得分:2)

不完全相同,但非常相似。

您可以使用预备语句: http://dev.mysql.com/doc/refman/5.7/en/sql-syntax-prepared-statements.html

示例:

PREPARE soExample 
FROM 'INSERT 
      INTO usr (id, username, profile_pic) 
      VALUES (NULL, ?, (SELECT name 
                        FROM customers 
                        WHERE id = ? 
                        LIMIT 1))';

SET @uname = "someUserNameForTheExample";
SET @id = "1";
EXECUTE soExample USING @uname, @id;

或者你也可以使用程序或/和函数

<强>功能

DROP FUNCTION IF EXISTS insertExample$$
CREATE FUNCTION insertExample(userNameVar VARCHAR(255), uID INT(11)) RETURNS BOOLEAN
BEGIN
    INSERT 
    INTO usr (id, username, profile_pic) 
    VALUES (NULL, userNameVar, (SELECT name 
                                FROM customers 
                                WHERE id = uID 
                                LIMIT 1));
    IF ROW_COUNT() > 0 THEN 
        RETURN TRUE;
    ELSE
        RETURN FALSE;
    END IF;                
END$$

功能使用

SELECT insertExample("SomeUsername" 2);

答案 1 :(得分:0)

也许你应该先阅读https://dev.mysql.com/doc/refman/5.7/en/create-procedure.html。由于Mysql函数为预构建查询启用了参数化输入。