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

时间:2017-03-22 10:01:22

标签: php mysql mariadb

我正在使用 服务器版本10.1.21-MariaDB和mysql 来执行数据操作。我正在创建用于搜索笑话的迷你搜索工具。图像中显示了我如何执行它的概述。一切正常,但当我尝试执行sql语句时,它显示语法错误。我试图深入挖掘它,但由于我对这些东西很陌生,我在这里失去了挖掘使用语法的确切方法。错误以粗体字显示,下面提供了错误发生的地方。我认为错误必须在try块内,请帮我解决。

enter image description here

//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();
}

错误说明: 数组([:authorid] => 6 [:categoryid] => 10 [:joketext] =>%一直在工作%)获取笑话时出错。 SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;检查与您的MariaDB服务器版本对应的手册,以便在'TRUE AND authorid ='6'和categoryid ='10'附近使用正确的语法并且在第1行使用笑话LIKE'%一直在工作%'

2 个答案:

答案 0 :(得分:1)

在$ from和$ where变量之间没有空间。目前他们正在联合:'来自joke_infoWHERE TRUE'。尝试在$ from变量中给出一个空格。

答案 1 :(得分:1)

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