【问题标题】:SQL Syntax Error When Sending From Script [duplicate]从脚本发送时出现 SQL 语法错误 [重复]
【发布时间】:2020-08-04 12:13:59
【问题描述】:

当我从 PHP 脚本发送此 SQL 时,我得到一个 SQL 语法错误,但是,如果我从 phpMyAdmin 运行它,它会按预期工作。

SQL:

DELIMITER $
    CREATE TRIGGER update_listing_count
    AFTER UPDATE ON `items`
    FOR EACH ROW BEGIN
        UPDATE `listings` SET units = (SELECT COUNT(*) FROM `items` WHERE listingid = NEW.listingid) WHERE id = NEW.listingid;
        UPDATE `listings` SET unitsSold = (SELECT COUNT(*) FROM `items` WHERE listingid = NEW.listingid AND sold = true) WHERE id = NEW.listingid;
    END$
    DELIMITER ;

PHP:

$conn = DBConnection();

    $stmt = $conn->prepare("DELIMITER $
    CREATE TRIGGER update_listing_count
    AFTER UPDATE ON `items`
    FOR EACH ROW BEGIN
        UPDATE `listings` SET units = (SELECT COUNT(*) FROM `items` WHERE listingid = NEW.listingid) WHERE id = NEW.listingid;
        UPDATE `listings` SET unitsSold = (SELECT COUNT(*) FROM `items` WHERE listingid = NEW.listingid AND sold = true) WHERE id = NEW.listingid;
    END$
    DELIMITER ;");
    $stmt->execute();

错误:

致命错误:未捕获的 PDOException:SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 C:\xampp\htdocs\marketplace.php:25 的第 1 行的“DELIMITER $ CREATE TRIGGER update_listing_count AFTER UPDATE ON items”附近使用正确的语法:# 0 C:\xampp\htdocs\marketplace.php(25): PDOStatement->execute() #1 {main} 在第 25 行的 C:\xampp\htdocs\marketplace.php 中抛出

【问题讨论】:

    标签: php mysql sql


    【解决方案1】:

    答案是你不能在 pdo 上使用 DELIMETER...

    查看这个答案https://stackoverflow.com/a/50969269/13113663

    【讨论】:

    • 如果答案是链接到另一个问题,这通常会作为副本关闭。就目前而言,这个问题/答案没有提供任何新内容,只会堵塞 SO 上已经很大的资源池。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    • 2020-11-05
    • 2014-03-28
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多