PHP的mysqli准备语句像

我怎么能用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行。 那么即使返回多于一行,我怎样才能得到所有的结果呢?

这是如何正确获取结果

 $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"; } 

我希望你能意识到我直接从这里和这里的手册中得到了答案,这是你应该先走的地方。

作为上述给定答案的替代scheme,您还可以使用MySQL CONCAT函数:

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

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