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

我从一行中收到两种不同类型的错误,我花了很长时间才找出错误所在。这是 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';

出了什么问题?


慕容森
浏览 110回答 1
1回答

慕田峪9158850

您的数据库和表名将从中添加$this->table,“p”是它的别名。它们之间需要用空格隔开,就像数据库名一样,FROM它们之间需要空格。
打开App,查看更多内容
随时随地看视频慕课网APP