我正在尝试创建一个mysql存储函数
DROP FUNCTION IF EXISTS getDistance;
DELIMITER $$
CREATE FUNCTION `getDistance`(`lat1` VARCHAR(255), `lng1` VARCHAR(255), `lat2` VARCHAR(255), `lng2` VARCHAR(255)) RETURNS varchar(255) CHARSET utf8
BEGIN
DECLARE distance varchar(255);
SELECT (6371 * acos(cos(radians(lat2)) * cos(radians(lat1)) * cos(radians(lng1) - radians(lng2)) + sin(radians(lat2)) * sin(radians(lat1)))) INTO distance;
if(distance is null) then
return null;
else
return distance;
end if;
END
$$
DELIMITER ;
如果我通过phpMyAdmin执行函数,工作就会很好,函数就会在数据库中创建
但是,当我试图运行Laravel(V6.x)迁移来创建存储的函数时,我遇到了错误
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateStoredFunction extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
DB::unprepared('
DROP FUNCTION IF EXISTS getDistance;
DELIMITER $$
CREATE FUNCTION `getDistance`(`lat1` VARCHAR(255), `lng1` VARCHAR(255), `lat2` VARCHAR(255), `lng2` VARCHAR(255)) RETURNS varchar(255) CHARSET utf8
BEGIN
DECLARE distance varchar(255);
SELECT (6371 * acos(cos(radians(lat2)) * cos(radians(lat1)) * cos(radians(lng1) - radians(lng2)) + sin(radians(lat2)) * sin(radians(lat1)))) INTO distance;
if(distance is null) then
return null;
else
return distance;
end if;
END
$$
DELIMITER ;
');
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
DB::unprepared('DROP FUNCTION IF EXISTS getDistance');
}
}
错误
条令\dbal\driver\pdo\exception::(“SQLState[42000]:语法错误或访问违规:1064您的SQL语法中有错误;请查看与您的MariaDB服务器版本相对应的手册,以了解在'delimiter$$CREATE FUNCTIONgetdistance
(lat1
VARCHAR(255)'第1行使用的正确语法”)
delimiter
不是有效的SQL语句。这只是一个MySql客户端命令。所以别用了。你得到的错误告诉你这一点。
您可以在Laravel中创建一个存储过程,如下所示,这将使delimiter
过时
试试这个
class CreateStoredFunction extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
DB::unprepared('
DROP FUNCTION IF EXISTS getDistance;
CREATE FUNCTION `getDistance`(`lat1` VARCHAR(255), `lng1` VARCHAR(255), `lat2` VARCHAR(255), `lng2` VARCHAR(255)) RETURNS varchar(255) CHARSET utf8
BEGIN
DECLARE distance varchar(255);
SELECT (6371 * acos(cos(radians(lat2)) * cos(radians(lat1)) * cos(radians(lng1) - radians(lng2)) + sin(radians(lat2)) * sin(radians(lat1)))) INTO distance;
if(distance is null) then
return null;
else
return distance;
end if;
END
');
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
DB::unprepared('DROP FUNCTION IF EXISTS getDistance');
}
}
运行php artisan migrate时,它会给出以下错误消息 1.PDOException::(“SQLSTATE[HY000][2002]连接被拒绝”)/Users/redblac/olivertes/vendor/laravel/framework/src/illusted/Database/Connectors/Connector.php:70 2 PDO::_构造(“mysql:ho
问题内容: 有没有办法在Laravel 4迁移中生成存储的MYSQL过程? 例如,这是一个简单的过程生成查询,以字符串形式存储(通过Heredoc) 在迁移函数中运行此命令时,出现以下错误: 问题答案: 您的代码有两个主要问题 不是有效的sql语句。这只是一个MySql客户端命令。因此,请不要使用它。 顺便说一句 ,您得到的错误恰恰告诉您。 您无法使用来执行代码,因为它使用的预准备语句源代码。您可
我正在从事一个项目,我正在使用laravel 5.8。这里我想创建一个外键。我试了很多次,但每次都收到一条关于迁移时间的错误消息。有三个表一个是行业,是小学和学生,这些是第二个表。我想在这两个辅助表trade_id上创建一个外键作为键的名称。 这是交易表(主表)。 这是学生表(辅助表)。 这是放置表(辅助表)。 在迁移时出现错误。
我正在上进行开发,并在本地环境和生产环境中进行以下迁移。 我想用以下经过调整的字段来更改迁移: 由于我正在生产中使用当前的迁移,我不希望丢失数据。 我只是尝试用我的新表定义修改迁移文件,但我得到了: 有什么建议如何在Laravel适当地改变迁移? 谢谢你的回复!
迁移cache分页 仓库地址: cache 安装 composer require illuminate/cache 暂时实现 redis方式 还需安装 composer require illuminate/redis composer require predis/predis //个人比较喜欢predis 启动predis function frameInitialized() {
我买了新的MacBook Pro,我在其中安装了mysql,然后安装sequel Pro来查看表和数据库,但是当我命令时,这个错误指控错误图像 近30个小时来,我一直在忍受这个问题,有人能帮我看一下吗