PDO如果使用了“where like”子句,则无法找到数据

时间:2013-06-14 08:40:45

标签: php sql pdo where

我想使用pdo类从MSSQL DB获取一些数据并使用%%子句

之类的地方

我想找到用户名:mozzey0410

如果我只搜索mozzey04或mozzey041,我可以找到它。但如果我尝试使用全名:mozzey0410没有给出记录。 如何解决这个问题?我想使用相同的查询搜索完整或部分名称。

$user2 = $db->prepare("Select top 100 memb_guid,memb___id,mail_addr,Gender,Country from MEMB_INFO where memb___id like ? and mail_addr like ?");
$user2->bindValue(1, $userid . '%');
$user2->bindValue(2, $mail . '%');
$user2->execute();
$user = $user2->fetchall();

3 个答案:

答案 0 :(得分:0)

$user2 = $db->prepare("Select top 100 memb_guid,memb___id,mail_addr,Gender,Country from MEMB_INFO where memb___id like concat('%',?,'%') and mail_addr like ?");

并绑定没有'%'的值

答案 1 :(得分:0)

我认为您可以将wildcard添加到变量

前面并附加$user2->bindValue(1, '%' . $userid . '%', PDO::PARAM_STR); $user2->bindValue(2, '%' . $mail . '%', PDO::PARAM_STR);
$user2 = $dbh->prepare('Select top 100 memb_guid,memb___id,mail_addr,Gender,Country from MEMB_INFO where memb___id like :userid and mail_addr like :mail');

$userid = "%".$userid ."%";
$mail= "%".$mail."%";

$user2->bindParam(':userid', $userid, PDO::PARAM_STR);
$user2->bindParam(':mail', $mail, PDO::PARAM_STR);

否则,您可以使用名称而不是占位符来执行不同的操作

{{1}}

答案 2 :(得分:0)

好的,发现了问题:

我的列搜索(memb___id)的长度为10,我更改为16并立即工作! 所以关于列长度。