-2

我的表中有一行let's,现在我想搜索该行,但没有得到任何结果。我可以搜索其他行,但如果它包含撇号,我不会得到任何结果。

 $q = $_GET['term'];

 SELECT * FROM table where title LIKE '%$q%'

为什么它没有向我显示特定的行?我在 php.ini 中禁用了 magic_quotes

4

1 回答 1

2

$_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();

请注意,我也转义了%and _,因为在这种情况下它们将被视为通配符。

于 2013-11-10T21:35:16.307 回答