这里已部分回答:
MySQL Like multiple values
我反对
$search = explode('', $search);
并将它们直接输入到 SQL 查询中,因为这很容易通过搜索栏进行 SQL 注入。您必须先对字符进行转义,以防他们尝试一些有趣的事情,例如:“--; DROP TABLE name;
$search = str_replace('"', "''", 搜索);
但即使这样也不是完全安全的。您必须尝试使用 SQL 准备好的语句才能更安全。使用正则表达式更容易构建函数来准备和创建您想要的内容。
function makeSQL_search_pattern($search) {
search_pattern = false;
//escape the special regex chars
$search = str_replace('"', "''", $search);
$search = str_replace('^', "\\^", $search);
$search = str_replace('$', "\\$", $search);
$search = str_replace('.', "\\.", $search);
$search = str_replace('[', "\\[", $search);
$search = str_replace(']', "\\]", $search);
$search = str_replace('|', "\\|", $search);
$search = str_replace('*', "\\*", $search);
$search = str_replace('+', "\\+", $search);
$search = str_replace('{', "\\{", $search);
$search = str_replace('}', "\\}", $search);
$search = explode(" ", $search);
for ($i = 0; $i < count($search); $i++) {
if ($i > 0 && $i < count($search) ) {
$search_pattern .= "|";
}
$search_pattern .= $search[$i];
}
return search_pattern;
}
$search_pattern = makeSQL_search_pattern($search);
$sql_query = "SELECT name FROM Products WHERE name REGEXP :search LIMIT 6"
$stmt = pdo->prepare($sql_query);
$stmt->bindParam(":search", $search_pattern, PDO::PARAM_STR);
$stmt->execute();
我没有测试过这段代码,但这是我在你的情况下会做的。
我希望这会有所帮助。