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