为了账号安全,请及时绑定邮箱和手机立即绑定

未捕获的 PDOException:语法错误或访问冲突:1064 来自不正确的间距

未捕获的 PDOException:语法错误或访问冲突:1064 来自不正确的间距

PHP
慕容森 2023-04-21 10:51:56
我从一行中收到两种不同类型的错误,我花了很长时间才找出错误所在。这是 php 在使用 bacticks 连接 MySql 查询语句以分隔字符串时显示的一个有趣的行为。$query='SELECT c.name as category_name, p.id, p.category_id, p.title, p.body, p.author, p.created_at    FROM'.$this->table. ' p    LEFT JOIN categories c ON p.category_id=c.id    ORDER BY p.created_at DESC';注意:FROM 和反引号之间没有空格。错误如下致命错误:未捕获的 PDOException:SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有误;检查与您的 MariaDB 服务器版本对应的手册,了解在 C:\xampp\htdocs\php_REST_myblog\ 中第 2 行的 'p LEFT JOIN categories c ON p.category_id=c.id ORDER BY p.crea' 附近使用的正确语法models\Post.php: 31 堆栈跟踪:#0 C:\xampp\htdocs\php_REST_myblog\models\Post.php(31): PDOStatement->execute()#1 C:\xampp\htdocs\php_REST_myblog\api\posts \read.php(18): Post->read()#2 {main } throw in C:\xampp\htdocs\php_REST_myblog\models\Post.php on line 31下一个变化是  $query='SELECT c.name as category_name, p.id, p.category_id, p.title, p.body, p.author, p.created_at    FROM '.$this->table. 'p    LEFT JOIN categories c ON p.category_id=c.id    ORDER BY p.created_at DESC';注意反引号和 p 之间没有空格。DB name 是 myblog 和 table name 是 posts. 下面的错误是致命错误:未捕获的 PDOException:SQLSTATE[42S02]:未找到基表或视图:1146 C:\xampp\htdocs\php_REST_myblog\models\Post.php 中不存在表“myblog.postsp”:31 堆栈跟踪:# 0 C:\xampp\htdocs\php_REST_myblog\models\Post.php(31): PDOStatement->execute()#1 C:\xampp\htdocs\php_REST_myblog\api\posts\read.php(18): 后-> read()#2 {main }在第31行 C:\xampp\htdocs\php_REST_myblog\models\Post.php中抛出正确的代码在下面有两个额外的空格。$query='SELECT c.name as category_name, p.id, p.category_id, p.title, p.body, p.author, p.created_at        FROM '.$this->table. ' p        LEFT JOIN categories c ON p.category_id=c.id        ORDER BY p.created_at DESC';出了什么问题?
查看完整描述

1 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

您的数据库和表名将从中添加$this->table,“p”是它的别名。它们之间需要用空格隔开,就像数据库名一样,FROM它们之间需要空格。



查看完整回答
反对 回复 2023-04-21
  • 1 回答
  • 0 关注
  • 89 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信