Php 创建不使用PDO的事件语句?

Php 创建不使用PDO的事件语句?,php,mysql,pdo,prepared-statement,Php,Mysql,Pdo,Prepared Statement,我似乎一辈子都不明白为什么这个CREATE-EVENT语句不起作用。我可以从CLI将其等效项直接放入MariaDB中,但由于某些原因,此项不起作用 echo "unspaced, nexttime, ident, ttime<br />"; var_dump ($unspaced, $nexttime, $ident, $ttime); echo "<br />"; $neweventstatement = $loginconn

我似乎一辈子都不明白为什么这个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();
我也尝试过一些明显的变体,比如

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不能是预处理语句。

mysql手册中的部分包含您在预处理语句中使用的SQL语句列表<代码>创建事件语句不包括在此列表中,因此不能将其用作准备好的语句


您必须通过字符串连接创建sql语句并执行它。您必须添加进一步的检查,以确保这不会导致sql注入漏洞。

您在cli中尝试过这一点吗?这是我在mysql 5.7.30中得到的信息<代码>#1295-此命令在准备好的语句协议中还不受支持Well。。。废话。这就是我害怕的。关于StackOverflow还有几个关于预处理语句和创建事件的问题,但没有一个答案提到它不兼容的事实,所以我想“如果它不兼容,有人会提到它……对吧?”无论如何,这实际上非常有用,尽管我很失望。谢谢
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 ^^