我正在使用 服务器版本10.1.21-MariaDB和mysql 来执行数据操作。我正在创建用于搜索笑话的迷你搜索工具。图像中显示了我如何执行它的概述。一切正常,但当我尝试执行sql语句时,它显示语法错误。我试图深入挖掘它,但由于我对这些东西很陌生,我在这里失去了挖掘使用语法的确切方法。错误以粗体字显示,下面提供了错误发生的地方。我认为错误必须在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();
}
错误说明: 数组([:authorid] => 6 [:categoryid] => 10 [:joketext] =>%一直在工作%)获取笑话时出错。 SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;检查与您的MariaDB服务器版本对应的手册,以便在'TRUE AND authorid ='6'和categoryid ='10'附近使用正确的语法并且在第1行使用笑话LIKE'%一直在工作%'
答案 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';