PHP:MYSQLi查询在搜索参数包含单引号时不返回结果


PHP: MYSQLi query returns no results when search parameter includes single quote

我有一个搜索MySQL表的PHP脚本。它适用于常规文本搜索,但当搜索字符串包含单引号(如单词O'Brien)时,它不会返回任何结果。在phpMyAdmin中运行等效的SQL会返回结果。

这是我正在使用的代码:

$mysqli = new mysqli($host, $user, $password, $database);
$mysqli->set_charset('utf8');    
if (isset($_GET["q"]))
{
    $search = $_GET["q"];
}
$sql = 'SELECT * FROM MyTable WHERE MyField LIKE ?';
$stmt = $mysqli->prepare($sql);
$param = '%' . $search . '%';
$stmt->bind_param("s", $param);
$stmt->execute();
$result = $stmt->get_result();

如何处理像O'Brien这样的字符串以便返回结果?

好吧,问题似乎是一些使用filter_var:的旧代码

filter_var($search, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW);

当我删除它时,查询将按预期工作。

谢谢你抽出时间!

Paul

使用mysqli::real_escape_string()

$sql = $mysqli->real_escape_string($sql); // where $mysqli is your connection

希望这能有所帮助。