我的表中有一行let's
,现在我想搜索该行,但没有得到任何结果。我可以搜索其他行,但如果它包含撇号,我没有得到任何结果。
$q = $_GET['term'];
SELECT * FROM table where title LIKE '%$q%'
为什么它没有向我显示该特定行?我已经在 php 中禁用了magic_quotes.ini
当$_GET['term']
包含撇号时会发生什么,例如当它包含let's
撇号时?我看看:
SELECT * FROM table where title LIKE '%let's%'
你看到撇号不匹配了吗?有你的问题。
为此,您需要准备好的声明。使用 PDO 时,它的读法类似于
$stmt = $pdo->prepare('SELECT * FROM table where title LIKE ?');
$q = '%' . addcslashes($_GET['term'], '%_') . '%';
$stmt->execute(array($q));
使用 MySQLi 时,这将如下所示:
$stmt = $dbh->prepare('SELECT * FROM table where title LIKE ?');
$q = '%' . addcslashes($_GET['term'], '%_') . '%';
$stmt->bind_param('s', $q);
$stmt->execute();
请注意,我也转义了%
和_
,因为在这种情况下,它们将被视为通配符。