2017-08-10 112 views
0

当我运行下面的代码时,它什么都不返回。当我在'?'的位置显式地输入一个字符串时,它会返回预期的结果,但是使用准备好的版本到目前为止还没有为我工作。我不认为存在任何种类的版本控制问题,因为过去使用INSERT查询的准备语句对我有用。准备好的声明可能是什么问题?PHP SQL编写的select查询不返回任何东西

$pdo = new PDO("mysql:host=localhost;dbname=database", $user, $pass); 
$sql = "SELECT * FROM table WHERE column LIKE '%?%';"; 
$stmt = $pdo->prepare($sql); 
$stmt->execute(array($_GET['searchterm'])); 
$results = $stmt->fetchAll(); 
print_r($results); 

回答

0

您正在准备该值,因此它不会像您只是将该字符串放入查询中一样。

当准备一个字符串时,你不需要添加"',这是为你完成的。您需要将%的值添加到您要转义的值中。

$pdo = new PDO("mysql:host=localhost;dbname=database", $user, $pass); 
$sql = "SELECT * FROM table WHERE column LIKE ?;"; 
$stmt = $pdo->prepare($sql); 
$stmt->execute(array("%{$_GET['searchterm']}%")); 
$results = $stmt->fetchAll(); 
print_r($results); 
+1

工作完美。回想起来,我明白为什么我的第一次尝试没有奏效。谢谢。 –