Search code examples
mysqlphpmyadminphpstorm

SQL query runs from IDE but not in phpmyadmin


I've got this SQL code:

CREATE EVENT `update_statistics`
  ON SCHEDULE EVERY 1 DAY STARTS '2015-08-24 02:00:00'
  ON COMPLETION PRESERVE
DO BEGIN

  UPDATE statistics
  SET km_traveled     = (SELECT sum(km)
                         FROM archived_trips),
    passengers_driven = (SELECT sum(passengers)
                         FROM archived_trips),
    trips_taken       = (SELECT count(*)
                         FROM archived_trips)
  WHERE id = 1;

  UPDATE statistics
  SET co_saved = ((SELECT km_traveled
                   FROM statistics) * 0.215 * (SELECT passengers_driven
                                               FROM statistics))
  WHERE id = 1;

END;

When I run it through the SQL console in PhpStorm - it runs fine and the scheduled task works and so on.

But if I try to run the query directly in phpmyadmin, I get the following error:

#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 '' at line 13 

Line 13 is WHERE id=1;. Honestly, I don't see any syntax problem with the query. Any suggestions?


Solution

  • The delimiter of the query is ';' and ';' is also used in the stored procedure, causing the query to fail.

    Add DELIMITER // before the statement and end with // to fix this.

    DELIMITER //
    
    CREATE EVENT `update_statistics`
      ON SCHEDULE EVERY 1 DAY STARTS '2015-08-24 02:00:00'
      ON COMPLETION PRESERVE
    DO BEGIN
    
      UPDATE statistics
      SET km_traveled     = (SELECT sum(km)
                             FROM archived_trips),
        passengers_driven = (SELECT sum(passengers)
                             FROM archived_trips),
        trips_taken       = (SELECT count(*)
                             FROM archived_trips)
      WHERE id = 1;
    
      UPDATE statistics
      SET co_saved = ((SELECT km_traveled
                       FROM statistics) * 0.215 * (SELECT passengers_driven
                                                   FROM statistics))
      WHERE id = 1;
    
    END; //
    
    DELIMITER ;
    

    With PHPstorm, sending multiple queries in one go is probably disabled, causing MySQL to ignore the delimiter.