问题已解决
教程上的操作并没有错误。
问题出在,我是在本机(非 vagrant )用 Apache 直接连到了项目在本机上的位置。然而,数据库的配置是相对于vagrant 上的本地数据库。因此,在查询的时候,连接的是我本机上的本地数据库。于是就出现了这些错误。
错误背景描述
在 Controller 中使用的验证规则如下:
$this->validate($request, ['email' => 'required|email|unique:users|max:255']);
在浏览器中,我得到了如下报错(不知道为什么有乱码):
Illuminate\Database\QueryException thrown with message "SQLSTATE[HY000] [2002] ����Ŀ����������ܾ��������ӡ�
(SQL: select count(*) as aggregate from `users` where `email` = email@example.com)"
我将上面报错中的 sql 语句复制到 Navicat 12.1.20 中查询( mysql 版本 5.7.22 ),得到的报错信息是:
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 '@example.com' at line 1
根据以上报错信息,我在邮箱周围加上了引号,得到了正确的查询结果。修改后的语句如下:
select count(*) as aggregate `users` where `email` = 'email@example.com'
我的问题
为什么邮箱不加引号会出错?
本社区的教程中并没有提到此错误。我可能在哪里错了?是我的什么设置有问题吗?
我该如何解决问题?
其他环境信息
mysql 详细版本信息
$ mysql --version
mysql Ver 14.14 Distrib 5.7.22, for Linux (x86_64) using EditLine wrapper
$ mysqld --version
mysqld Ver 5.7.22-0ubuntu18.04.1 for Linux on x86_64 ((Ubuntu))
mysql 没有进行过特殊的配置,就是 homestead 的默认配置。
迁移文件中 email 字段是这样创建的的:
$table->string('email')->unique();