2013-08-30 144 views
29

我如何使用mysqli用LIKE进行查询并获取所有结果?php mysqli准备好的语句LIKE

这是我的代码,但它不到风度工作:

$param = "%{$_POST['user']}%"; 
$stmt = $db->prepare("SELECT id,Username FROM users WHERE Username LIKE ?"); 
$stmt->bind_param("s", $param); 
$stmt->execute(); 
$stmt->bind_result($id,$username); 
$stmt->fetch(); 

此代码它似乎并没有工作。我搜查了很多。 也可能会返回多于1行。 那么即使返回多于一行,我如何得到所有的结果呢?

+1

请定义“不起作用” - PHP错误? MySQL错误?没有错误,但0结果? –

+0

我想遍历所有结果。我怎样才能做到这一点? 当我说不起作用。它不会返回任何内容... – user2493164

+0

此代码中没有返回运算符。 **如何它应该返回任何东西?** –

回答

48

这里是你如何正确地获取结果

$param = "%{$_POST['user']}%"; 
$stmt = $db->prepare("SELECT id,Username FROM users WHERE Username LIKE ?"); 
$stmt->bind_param("s", $param); 
$stmt->execute(); 
$stmt->bind_result($id,$username); 

while ($stmt->fetch()) { 
    echo "Id: {$id}, Username: {$username}"; 
} 

,或者你也可以这样做:

$param = "%{$_POST['user']}%"; 
$stmt = $db->prepare("SELECT id,Username FROM users WHERE Username LIKE ?"); 
$stmt->bind_param("s", $param); 
$stmt->execute(); 

$result = $stmt->get_result(); 
while ($row = $result->fetch_array(MYSQLI_NUM)) { 
    foreach ($row as $r) { 
    print "$r "; 
    } 
    print "\n"; 
} 

我希望你知道我是直接从手动herehere得到的答案,这就是你应该先走了。

+2

在防卫的OP,手册页都没有提到LIKE比较“功能” –

21

作为替代给出答案上面,你也可以使用MySQL CONCAT功能这样的:

$stmt = $db->prepare("SELECT id,Username FROM users WHERE Username LIKE CONCAT('%',?,'%') "); 
$stmt->bind_param("s", $param); 
$stmt->execute(); 

这意味着你不需要编辑您的$param价值,但确实会使稍长查询。

+0

嗨连接安全从SQL注入?我在问,因为它有引号。谢谢 –

+0

@mikevorisis是的,它是安全的,因为查询仍然是参数化的(*使用'''*)。引号是因为MySQL正在CONCATenating三个字符串。 – Martin

+0

好的,谢谢@Martin –