MySQLi编写的语句没有采用调用过程的有效查询

时间:2016-04-02 14:01:27

标签: php mysql stored-procedures mysqli prepared-statement

$prepared = $db->prepare("
        SET @content = ?;

        CALL add_interest_if_not_exists( @content );

        SET @iid = (SELECT interests_id
                    FROM interests
                    WHERE content = @content);

        REPLACE INTO profile_interests (user_id, interests_id, likes)
        VALUES (
            ?,
            @iid,
            ?
        )
    ");
echo $db->error;

错误是:

  

您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以便在'CALL add_interest_if_not_exists(@content)附近使用正确的语法; SET @iid =(在第3行选择我'

查询使用MySQL工作台(硬编码值)。为什么不在我准备好的声明中......

2 个答案:

答案 0 :(得分:1)

这不是单个查询,而是一组查询。

因此,您必须逐个运行它们,每个都有单独的query()prepare()/execute()来电。

答案 1 :(得分:0)

为什么不使用存储过程?

CREATE PROCEDURE add_user_interest(p_content varchar(200), p_user_id int,p_likes int)
BEGIN 

    CALL add_interest_if_not_exists( p_content );

    SET @iid = (SELECT interests_id
                FROM interests
                WHERE content = p_content);

    REPLACE INTO profile_interests (user_id, interests_id, likes)
    VALUES (
        p_user_id,
        @iid,
        p_likes
    );

END

结束时,您将调用单个预备声明

$prepared = $db->prepare("CALL add_user_interest( ?, ? , ? )");