mysql vaildate_用 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();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值