【问题标题】:Laravel - SQLSTATE[42000]: Syntax error or access violation: 1064 on PROCEDURE OR FUNCTION migrationLaravel - SQLSTATE [42000]:语法错误或访问冲突:PROCEDURE OR FUNCTION迁移时出现1064
【发布时间】:2018-05-31 06:48:26
【问题描述】:

我有 2 台机器。一个使用 php 5.6,另一个使用 php 7。

php 5.6 的有:

[root@bd-mg ~]# mysql --version mysql Ver 15.1 Distrib 10.1.23-MariaDB, for Linux (x86_64) using readline 5.1

php 7 的另一个有:

[root@XXX]# mysql --version mysql Ver 15.1 Distrib 5.5.59-MariaDB, for Linux (x86_64) using readline 5.1

当我在使用 php 5.6 的机器上运行迁移时,我没有任何问题。所有的表、视图、过程和函数都被创建。但是在另一台机器上,当我运行php artisan migrate 时,我有这些错误:

[root@XXX]# php artisan migrate

In Connection.php line 647:

  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 '=`root`@`localhost` FUNCTION `genera_pr
  oyeccion_demanda`(_IN_FECHA_PROYECCION da' at line 1 (SQL: REPLACE DEFINER=`root`@`localhost` FUNCTION `genera_proyeccion_demanda`(_IN_FECHA_PROYECCION date) RETURNS double
  BEGIN
  END
  )


In PDOConnection.php line 62:

  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 '=`root`@`localhost` FUNCTION `genera_pr
  oyeccion_demanda`(_IN_FECHA_PROYECCION da' at line 1


In PDOConnection.php line 60:

  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 '=`root`@`localhost` FUNCTION `genera_proyeccion_demanda`(_IN_FECHA_PROYECCION da' at line 1

我的函数或过程当然有更多代码,但我试图最小化代码以丢弃这是一个语法问题,但我不明白,在我的其他机器上工作但不是在这里:

即使过程或函数几乎为空,也会发生此错误。有任何想法吗?数据库用户是root,我也以root运行php artisan。

【问题讨论】:

  • 从错误看来,最近的 PHP PDO 不喜欢迁移中的 REPLACE sql 命令 (2018_05_24_202139_create_genera_proyeccion_demanda_function)
  • 是的!那是!我删除它并且它工作。谢谢!提出一个答案,我会认为它是正确的。
  • 现在唯一的问题是如果表存在,我会得到另一个错误,其余迁移的执行将停止。但是谢谢,那是另一个故事

标签: laravel database-migration


【解决方案1】:

根据我的评论,php artisan migrate 命令的控制台错误通知您不接受 SQL REPLACE 语法。

这似乎源于 php7 中较新的 PDO。 php5.6 附带的版本显然接受了语法,但 php7 中的版本不接受。

迁移中的语法有问题2018_05_24_202139_create_genera_proyeccion_demanda_function

如果需要确认表是否存在,可以使用Schema::hasTable()方法,见https://laravel.com/docs/5.6/migrations#tables

【讨论】:

    猜你喜欢
    • 2018-02-06
    • 1970-01-01
    • 2017-10-29
    • 2015-10-12
    • 1970-01-01
    • 2022-01-25
    • 2014-01-14
    • 2013-12-02
    相关资源
    最近更新 更多