查询时Bindparam和Like条件

时间:2012-04-24 18:25:06

标签: sql parameters conditional-statements sql-like

我有这个功能,只需在数据库中查找与用户输入类似的名称。但是,我不能使用Like与param:uname。 我在网上看到的每个人都建议我做这样的事情

$username = "$%username%";

但是查询不会返回任何结果。

我知道数据库是正确制作的,因为如果我问这个,它会返回正确的答案

SELECT *  FROM $schema.pessoa WHERE nome LIKE %Mike%

然而,在我的代码中,$ username包含“Mike”,但它没有返回任何内容,我认为%username没有正确制作,但是如果我回复它,它确实包含我想要的字符串 - “麦克风”。 所以问题似乎在于我用参数质疑它,但我不知道

function SearchUser($username) {
  global $dbh, $schema;
  try {
    $username = "$%username%";
    $stmt = $dbh->prepare("SELECT *  FROM $schema.pessoa WHERE nome LIKE :uname");      
    $stmt->bindParam(':uname', $username);
    $stmt->execute();

    $result = $stmt->fetch(PDO::FETCH_ASSOC);
     if(empty($result))
       {echo 'empty';}
     return $result;
    }
catch(PDOException $e) {
  $_SESSION["s_errors"]["generic"][] = "ERRO[32]: ".$e->getMessage();
  header("Location: list.php");
  die;
}

1 个答案:

答案 0 :(得分:0)

它看起来对我来说,

我只能建议你这样试试,看看是否有任何区别

$username = 'Mike';    
$stmt->bindValue(":uname", "%".$username."%");

编辑。

再看一遍,这对我来说并不合适..

$username = '$%username%';  

不应该

$username = '%'.$username.'%';