从关系数据库中搜索笑话时出现错误
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';
我正在使用 服务器版本 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';