用 Controller 中的 validate () 验证邮箱,被报错 MySQL 语法错误

问题已解决

教程上的操作并没有错误。
问题出在,我是在本机(非 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();
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 2

拿你的代码和邮箱亲测,没发现你这个报错啊,还真不知道。

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!