Php Laravel Artisan路由:调用抛出MySQL错误
我正在使用Php Laravel Artisan路由:调用抛出MySQL错误,php,mysql,laravel,laravel-5,Php,Mysql,Laravel,Laravel 5,我正在使用Artisan通过命令行调用Laravel 5 Route。我按照本文中的说明创建了一个命令行控制器: 在web浏览器中导航到此路线时,我没有收到任何错误。此路由通过使用我创建的名为Ticker的模型执行API调用并将数据插入MySQL数据库 当我可以从CLI调用路由时,如下所示: $ php artisan route:call /d17059dfce4c09ef5e437b1d9455f7c6 我得到一个Laravel错误(其中truncate'tickers'是路由调用的控制器
Artisan
通过命令行调用Laravel 5 Route
。我按照本文中的说明创建了一个命令行控制器:
在web浏览器中导航到此路线时,我没有收到任何错误。此路由通过使用我创建的名为Ticker
的模型执行API调用并将数据插入MySQL数据库
当我可以从CLI调用路由时,如下所示:
$ php artisan route:call /d17059dfce4c09ef5e437b1d9455f7c6
我得到一个Laravel
错误(其中truncate'tickers'
是路由调用的控制器中执行的第一个SQL命令,tickers
是数据库中的表),说明:
SQLSTATE[HY000] [2002] No such file or directory (SQL: truncate `tickers`)
因为我似乎只是在通过命令行执行此路由时出错,这让我相信命令行脚本App\Console\Commands\CallRoute.php
一定有问题,如下所示:
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Http\Requests;
class CallRoute extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'route:call {uri}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'php artsian route:call /route';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$request = Request::create($this->argument('uri'), 'GET');
$this->info(app()->make(\Illuminate\Contracts\Http\Kernel::class)->handle($request));
}
}
您应该将/d17059dfce4c09ef5e437b1d9455f7c6作为选项而不是参数传入。它将其解释为一个目录
php artisan route:call --uri=/d17059dfce4c09ef5e437b1d9455f7c6
更新命令签名以包括uri
选项:
protected $signature = 'route:call {--uri=}';
命令:
class CallRoute extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'route:call {--uri=}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'php artsian route:call /route';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$request = Request::create($this->option('uri'), 'GET');
$this->info(app()->make(\Illuminate\Contracts\Http\Kernel::class)->handle($request));
}
}
试着看看这个问题
当我的php-cli与mysql的连接出现问题时,我遇到了类似的问题,而我的php-fpm工作正常(这也可能是在浏览器中导航到此路径时没有出现错误的原因)。我必须在php cli配置中启用mysql pdo扩展
只要在控制台中运行php-v
,如果您看到类似的内容:
PHP 7.2.1 (cli) (built: Jan 8 2018 23:39:24) ( NTS )
这可能意味着您必须为PHPCLI启用pdo支持也许您的意思是说截断表标识符
?您是否要扔掉该表中的所有内容?php artisan
命令创建和命令类对象(您创建的自定义命令)。这是为了获取可用命令和选项的列表
您可能已经添加了数据库查询(truncate table tickers
)任何命令文件构造函数(\uu construct()
) 该错误通常与您的mysql连接有关当我发出该命令时,我得到以下错误:the“-uri”选项不存在。
您需要在命令的签名中定义uri
。我会更新答案。很奇怪,但现在错误切换到:“uri”参数不存在
更新handle
方法以使用$this->option('uri')
而不是$this->argument()
现在解决了有关uri
的错误,但是我回到了我的OP中声明的原始错误,我的数据库仍然没有更新。我在/Applications/MAMP/bin/php/php7.2.1/conf/php.ini
中找到了MAMP的php cli配置,并为extension=pdo_mysql添加了一行。因此
但我在尝试执行cli命令时仍然收到相同的错误老实说,我不知道我做了什么来修复它,但它现在已经修复了。我尝试更改了几项内容,并清除了artisan配置缓存及其工作状态。我已经开始删除/取消执行我一个接一个尝试过的修复,现在我又回到了原点,但它仍在工作……我扔掉了表中的所有内容,但我OP中的语法不是实际使用的语法;我正在使用一个拉威尔模型来执行计算错误显示的操作。同样,在web浏览器中,一切都可以正常工作,只是不能通过CLI。无论如何,这个问题现在已经解决了。