我有一个搜索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
希望这能有所帮助。