撇号未得到承认

时间:2013-11-10 21:25:13

标签: php mysql sql

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

 $q = $_GET['term'];

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

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

1 个答案:

答案 0 :(得分: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();

请注意,我也会转义%_,因为在此上下文中它们将被视为通配符。