【发布时间】:2021-01-29 10:35:29
【问题描述】:
我似乎终其一生都无法弄清楚为什么这个 CREATE EVENT 语句不起作用。我可以从 CLI 将它的等价物直接放入 MariaDB,但由于某种原因,这个不起作用。
echo "unspaced, nexttime, ident, ttime<br />";
var_dump ($unspaced, $nexttime, $ident, $ttime);
echo "<br />";
$neweventstatement = $loginconn->prepare("CREATE EVENT :eventname ON SCHEDULE AT CURRENT_TIMESTAMP + :nexttime SECOND DO BEGIN UPDATE `tasks` SET ended = NULL WHERE id = :id AND created = :tasktime; END");
$neweventstatement->bindParam(':eventname', $unspaced, PDO::PARAM_STR);
$neweventstatement->bindParam(':nexttime', $nexttime, PDO::PARAM_INT);
$neweventstatement->bindParam(':id', $ident, PDO::PARAM_INT);
$neweventstatement->bindParam(':tasktime', $ttime, PDO::PARAM_STR);
$neweventstatement->execute();
产生以下输出:
unspaced, nexttime, ident, ttime
string(31) "t682020101400334320201014235504" int(300) int(68) string(19) "2020-10-14 00:33:43"
Error: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '? ON SCHEDULE AT CURRENT_TIMESTAMP + ? SECOND DO BEGIN UPDATE tasks SET ended = NULL' at line 1
我也尝试过明显的变体,例如
CREATE EVENT :eventname ON SCHEDULE AT CURRENT_TIMESTAMP + :nexttime SECONDS DO BEGIN UPDATE `tasks` SET ended = NULL WHERE id = :id AND created = :tasktime; END
CREATE EVENT :eventname ON SCHEDULE AT CURRENT_TIMESTAMP + :nexttime SECOND DO UPDATE `tasks` SET ended = NULL WHERE id = :id AND created = :tasktime;
CREATE EVENT :eventname ON SCHEDULE AT CURRENT_TIMESTAMP + :nexttime SECOND DO BEGIN UPDATE `tasks` SET ended = NULL WHERE id = :id AND created = :tasktime; END
DELIMITER ^^ CREATE EVENT :eventname ON SCHEDULE AT CURRENT_TIMESTAMP + :nexttime SECOND DO BEGIN UPDATE `tasks` SET ended = NULL WHERE id = :id AND created = :tasktime; END ^^
但似乎没有任何效果。
我觉得我错过了一些明显的东西,但我看不到它。
编辑:出于某种原因,一个粗心大意的人将此标记为“为什么我准备的声明不会使用表名”的重复项。它不是。我已经对其进行了编辑,以明确问题所在。如下所述,问题是 CREATE EVENT 不能是准备好的语句。
【问题讨论】:
-
你在 cli 中试过了吗?这是我在 mysql 5.7.30 中收到的消息。
#1295 - This command is not supported in the prepared statement protocol yetdev.mysql.com/doc/mysql-errors/5.7/en/…
标签: php mysql pdo prepared-statement