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

Php 未捕获PDOException:语法错误或访问冲突:1064来自不正确的间距,php,mysql,fatal-error,uncaught-exception,Php,Mysql,Fatal Error,Uncaught Exception,我从一行中得到两种不同类型的错误,我花了很长时间才找到错误所在。这是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_i

我从一行中得到两种不同类型的错误,我花了很长时间才找到错误所在。这是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和backtick之间没有空格。下面的错误是

致命错误:未捕获PDO异常:SQLSTATE[ 42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与您的产品相对应的手册 MariaDB服务器版本,以便在“p”附近使用正确的语法 左连接p.category_id=c.id上的类别c C:\xampp\htdocs\php\u REST\u myblog\models\Post.php:31堆栈跟踪中第2行的“按p.crea”排序: 0 C:\xampp\htdocs\php\u REST\u myblog\models\Post.php31:PDOStatement->execute 1c:\xampp\htdocs\php\u REST\u myblog\api\posts\read.php18:Post->read 2{main}在C:\xampp\htdocs\php\u REST\u 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';
请注意,backtick和p之间没有空格。数据库名为myblog,表名为posts。错误如下:

致命错误:未捕获的PDO异常:SQLSTATE[42S02 ]:找不到基表或视图:1146表“myblog.postsp”不存在 存在于C:\xampp\htdocs\php\u REST\u myblog\models\Post.php:31堆栈中 跟踪: 0 C:\xampp\htdocs\php\u REST\u myblog\models\Post.php31:PDOStatement->execute 1c:\xampp\htdocs\php\u REST\u myblog\api\posts\read.php18:Post->read 2{main}在C:\xampp\htdocs\php\u REST\u 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';

出了什么问题?

您的数据库和表名将从$this->table中添加,“p”是它的别名。它们之间需要用空格隔开,就像数据库名称一样。前两个是无效的sql语句,第三个是正确的sql语句,这就是它工作的原因。首先,基本上生成选择。。。发帖。。。靠近“p左连接类别…”,第二个生成选择。。。从postsp…-那张桌子根本不存在