从关系数据库中搜索笑话时出现错误

Error appears while searching joke from relational database

我正在使用 服务器版本 10.1.21-MariaDB 和 mysql 进行数据操作。我正在创建用于搜索的迷你搜索工具 jokes.The 我如何执行它的概述如图所示。一切正常,但是当我尝试执行 sql 语句时,它显示语法错误。我试图深入其中,但由于我对这些东西很陌生,所以我在这里和那里迷失了挖掘使用语法的确切方式。错误以粗体显示,下面提供了代码,其中错误 occurs.I 认为错误必须在 try 块内,请帮我解决这个问题。

//query logic
$select = 'SELECT id,joketext ';
$from   = 'FROM joke_info';
$where  = 'WHERE TRUE';

$placeholders = array();

if(isset($_GET['author']) != ''){
  $where .= " AND authorid = :authorid";
  $placeholders[':authorid'] = $_GET['author'];
}
if(isset($_GET['category']) != ''){

  $from .= ' INNER JOIN jokecategory ON id = jokeid';
  $where .= " AND categoryid = :categoryid";
  $placeholders[':categoryid'] = $_GET['category'];
}
if ($_GET['text'] != '') 
{
  $where .= " AND joketext LIKE :joketext";
  $placeholders[':joketext'] = '%' . $_GET['text'] . '%';
}

print_r($placeholders);
try
{
  $sql = $select . $from . $where;
  $s = $pdo->prepare($sql);
  $s->execute($placeholders);
}catch (PDOException $e)
{
  $error = 'Error fetching jokes. ';
  echo $error.$e->getMessage();
  exit();
}

错误是这样说的: Array ( [:authorid] => 6 [:categoryid] => 10 [:joketext] => %been working% ) 获取笑话时出错。 SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有误;检查与您的 MariaDB 服务器版本对应的手册,了解在第 1 行 ['TRUE AND authorid = '6' AND categoryid = '10' AND joketext LIKE '%been working%'' 附近使用的正确语法=12=]

$from 和 $where 变量之间没有 space。目前它们连接到:'FROM joke_infoWHERE TRUE'。尝试在 $from 变量中给出 space。

您在 $sql = $select . $from . $where; 之后生成的查询类似于 SELECT id,joketext FROM joke_info WHERE TRUE 所以 joke_info 和 Where 子句之间没有 space 它应该是 $from = ' FROM joke_info' and $where = ' WHERE TRUE '; 而不是 $from = 'FROM joke_info' and '$where ='WHERE TRUE';