2

PHPでmysqliを介してストアドプロシージャを作成しようとしています。PHPで実行すると1064エラーが発生し続けますが、同じSQLコマンドをPHPでコピーすると問題ありません。問題の原因を特定できる人、または同様の解決策を見つけた人はいますか?

プロシージャ コードを作成します。

DELIMITER //
CREATE PROCEDURE 6de443aacf727f6009e857480f33153cmakeLive (IN taskID INT, IN avaliableTime INT)
    BEGIN
        DECLARE done INT DEFAULT FALSE;
        DECLARE a INT;
        DECLARE cur1 CURSOR FOR SELECT t.`task_id`
            FROM `task_dependency` d
            LEFT OUTER JOIN (
                SELECT `task_id`, `dependent_on_task_id`, ti.`id`, min(ti.`completed`) as make_live
                FROM `task_dependency`
                LEFT OUTER JOIN (
                    SELECT `task_id`, `completed` FROM `6de443aacf727f6009e857480f33153c_tasks`
                ) ti ON ti.`task_id` = `dependent_on_task_id`
                GROUP BY `task_id`
            ) t ON d.`task_id` = t.`task_id`
            WHERE d.`dependent_on_task_id` = taskID
                AND t.make_live > 0;
        DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

        OPEN cur1;

        read_loop: LOOP
            FETCH cur1 INTO a;
            IF done THEN
                LEAVE read_loop;
            END IF;
            UPDATE `6de443aacf727f6009e857480f33153c_tasks` SET `live` = 1 WHERE `task_id` = a;
        END LOOP;

        CLOSE cur1;

        UPDATE `6de443aacf727f6009e857480f33153c_tasks` SET `earliest_start` = avaliableTime WHERE `task_id` IN (
            SELECT `task_id`
            FROM `task_dependency`
            WHERE `dependent_on_task_id` = taskID
        ) AND `earliest_start` < avaliableTime;
    END //
DELIMITER ;

PHP コード:

if (!$this->dbc->query("DROP PROCEDURE IF EXISTS " . $this->table_prefix . "makeLive") ||
    !$this->dbc->query($query)) {
    echo "Stored procedure creation failed: (" . $this->dbc->errno . ") " . $this->dbc->error . "<br /><br />" . $query;
    exit;
}
echo "success";
exit;

スクリプトの実行で次のエラーがスローされます...

Stored procedure creation failed: (1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER //
        CREATE PROCEDURE 6de443aacf727f6009e857480f33153cmakeLive (IN tas' at line 1

構文エラーと書かれていますが、phpmyadmin へのコマンドのそのままのコピー アンド ペーストが機能しているように見えるという事実は、おそらく何らかの mysqli バグのように見えますか?

4

3 に答える 3