我想让我们的搜索模块能够搜索像* lex这样的关键字。用*代替之前的字母。我发现添加到我的查询中的%不起作用并返回错误。请帮我看看我的代码。谢谢如何在MYSQL查询中函数返回值前后添加%
if(substr($searchfirst_name, 0, 1) == '*'){
$subquery .= " AND first_name LIKE %".Formatter::sql($searchfirst_name);
}elseif(substr($searchfirst_name, -1, 1) == '*'){
$subquery .= " AND first_name LIKE ".Formatter::sql($searchfirst_name)."%";
}else{
$subquery .= " AND first_name LIKE ".Formatter::sql($searchfirst_name);
}
我认为问题是因为函数Formatter :: sql()。它过滤变量并向其添加斜线。我如何修改或创建一个新的功能来做到这一点?
public static function sql($value, $fieldName = false) {
if($fieldName) {
return '`' . $value . '`';
}
else if(is_string($value)) {
return '\'' . addslashes($value) . '\'';
}
else if($value === null) {
return 'NULL';
}
else if($value === true) {
return 1;
}
else if($value === false) {
return 0;
}
else if(is_numeric($value)) {
return $value;
}
else {
return '\'' . addslashes($value) . '\'';
}
}
你有一个'Formatter :: sql'文档或它的代码的链接吗?您需要查看是否有其他参数不能自动包含引号。 – webbiedave
我的猜测是这样的错误:'你的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,在'%' – webbiedave