未捕获的 PDOException:语法错误或访问冲突:1064 来自不正确的间距
Uncaught PDOException: Syntax error or access violation: 1064 from improper spacing
我从一行中收到两种不同类型的错误,我花了很长时间才找出错误所在。这是一个有趣的行为 php 在连接 MySql 查询语句时显示使用 bacticks 来分隔字符串。
$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 和反引号之间没有 space。接下来的错误是
Fatal error: Uncaught PDOException: 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 'p
LEFT JOIN categories c ON p.category_id=c.id
ORDER BY p.crea' at line 2 in C:\xampp\htdocs\php_REST_myblog\models\Post.php: 31 Stack trace:
#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 } thrown 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 之间没有 space。数据库名称是 myblog,table 名称是 posts.The 错误是
Fatal error: Uncaught PDOException: SQLSTATE[ 42S02
]: Base table or view not found: 1146 Table 'myblog.postsp' doesn't
exist in C:\xampp\htdocs\php_REST_myblog\models\Post.php: 31 Stack
trace:
#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 } thrown in C:\xampp\htdocs\php_REST_myblog\models\Post.php on line
31
下面是正确的代码,多了两个 space。
$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';
出了什么问题?
您的数据库和 table 名称将从 $this->table
添加,'p' 是它的别名。它们之间需要用space隔开,就像数据库名和FROM
之间需要space一样。
我从一行中收到两种不同类型的错误,我花了很长时间才找出错误所在。这是一个有趣的行为 php 在连接 MySql 查询语句时显示使用 bacticks 来分隔字符串。
$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 和反引号之间没有 space。接下来的错误是
Fatal error: Uncaught PDOException: 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 'p LEFT JOIN categories c ON p.category_id=c.id ORDER BY p.crea' at line 2 in C:\xampp\htdocs\php_REST_myblog\models\Post.php: 31 Stack trace:
#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 } thrown 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 之间没有 space。数据库名称是 myblog,table 名称是 posts.The 错误是
Fatal error: Uncaught PDOException: SQLSTATE[ 42S02 ]: Base table or view not found: 1146 Table 'myblog.postsp' doesn't exist in C:\xampp\htdocs\php_REST_myblog\models\Post.php: 31 Stack trace:
#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 } thrown in C:\xampp\htdocs\php_REST_myblog\models\Post.php on line
31
下面是正确的代码,多了两个 space。
$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';
出了什么问题?
您的数据库和 table 名称将从 $this->table
添加,'p' 是它的别名。它们之间需要用space隔开,就像数据库名和FROM
之间需要space一样。