SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MariaDB 对应的手册

Posted

技术标签:

【中文标题】SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MariaDB 对应的手册【英文标题】:SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB 【发布时间】:2021-11-17 20:37:30 【问题描述】:

我在 Laravel 8 中遇到此错误

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '*) 

这就是我尝试进行查询的方式

$totalCitasGenero = DB::table('citas')->selectRaw('idEspecialidad, genero,  count (*) as totalCitas')->join('personas', 'personas.id', '=', 'citas.idPersonaP')->groupBy('idEspecialidad','genero')->get();

这就是我的表格的样子

CREATE TABLE `personas` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(50) NOT NULL,
  `apellido` varchar(50) NOT NULL,
  `cedula` varchar(10) NOT NULL,
  `email` varchar(40) DEFAULT NULL,
  `telefono` varchar(13) DEFAULT NULL,
  `direccion` varchar(100) NOT NULL,
  `ciudadResi` varchar(50) NOT NULL,
  `fechaNacimiento` date NOT NULL,
  `genero` varchar(100) NOT NULL,
  `estado` binary(1) NOT NULL,
  `idTipoPersona` int(11) NOT NULL,
  `idPersona` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `personas_FK` (`idTipoPersona`),
  KEY `personas_FK_1` (`idPersona`),
  CONSTRAINT `personas_FK` FOREIGN KEY (`idTipoPersona`) REFERENCES `tipo_personas` (`id`),
  CONSTRAINT `personas_FK_1` FOREIGN KEY (`idPersona`) REFERENCES `personas` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=73 DEFAULT CHARSET=utf8mb4

CREATE TABLE `citas` (
  `idPersonaD` int(11) NOT NULL,
  `idPersonaP` int(11) NOT NULL,
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `fecha` date NOT NULL,
  `hora` time NOT NULL,
  `idEspecialidad` int(11) NOT NULL,
  `estado` int(11) NOT NULL DEFAULT 1,
  PRIMARY KEY (`id`),
  KEY `citas_FK` (`idPersonaD`),
  KEY `citas_FK_1` (`idPersonaP`),
  KEY `citas_FK_2` (`idEspecialidad`),
  CONSTRAINT `citas_FK` FOREIGN KEY (`idPersonaD`) REFERENCES `personas` (`id`),
  CONSTRAINT `citas_FK_1` FOREIGN KEY (`idPersonaP`) REFERENCES `personas` (`id`),
  CONSTRAINT `citas_FK_2` FOREIGN KEY (`idEspecialidad`) REFERENCES `especialidades` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=88 DEFAULT CHARSET=utf8mb4

在 DBeaver 上,查询工作正常,这就是它的样子

select idEspecialidad, genero,  count (*) as totalCitas 
from citas as c join personas
where c.idPersonaP = personas.id 
group by genero, idEspecialidad ;

我期待的结果如下图所示。

将查询翻译成 Laravel 有什么问题?

如果我在将 ->get() 切换为 toSql() 之后对变量执行 dd ->按照建议,我会得到这个结果

"select idEspecialidad, genero,  count (*) as totalCitas from `citas` inner join `personas` on `personas`.`id` = `citas`.`idPersonaP` group by `idEspecialidad`, `genero`

我什至尝试再次将查询复制到 DBeaver 中,它工作正常,只是在 Laravel 中无法正常工作,不知道为什么。

查询看起来很好,所以我不知道为什么它在这种情况下不起作用。

【问题讨论】:

请分享您的查询输出,将->get() 替换为->toSql() 好的,我现在就做 我做了一个 dd() 来显示变量的值,它是这个“选择 idEspecialidad,genero,count (*) as totalCitas from citas inner join personas on personas .id = citas.idPersonaP group by idEspecialidad, genero 【参考方案1】:

尝试删除count (*)中的空白

$totalCitasGenero = DB::table('citas')->selectRaw('idEspecialidad, genero,  count(*) as totalCitas')->join('personas', 'personas.id', '=', 'citas.idPersonaP')->groupBy('idEspecialidad','genero')->get();

【讨论】:

好的,我会试试的 谢谢,它成功了。你救了我的命

以上是关于SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MariaDB 对应的手册的主要内容,如果未能解决你的问题,请参考以下文章

Cakephp SQLSTATE [42000]:语法错误或访问冲突:1064

SQLSTATE [42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误 - LARAVEL

Laravel 5.8 SQLSTATE [42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误

带有消息“SQLSTATE [42000]”的未捕获异常“PDOException”:语法错误或访问冲突:

SQLSTATE [42000]:语法错误或访问冲突:1064 PHP/MySQL [关闭]

为啥我是 laravel 抛出 SQLSTATE[42000]:语法错误或访问冲突:1064 错误