2013-10-24 68 views
-2

我的代码在这里是jQuery的ajax调用的一部分,并返回数据库中的所有结果而不是只有项目像我已经进入,我不明白为什么,有什么建议吗?pdo LIKE不工作

$lname = '%'.$_POST['lname'].'%'; 

$database->query("SELECT * FROM cust WHERE org_id = :org_id AND lname LIKE :lname"); 
$database->bind(':lname',$lname); 
$database->bind(':org_id',$_SESSION['org_id']); 
$existing = $database->resultset(); 

提前

+2

你的意思是返回所有'ord_id = ... '行,不管lname?你确认$ _POSt ['lname']是否包含你认为它的作用? –

+0

mark,是的,它正确,它返回所有org_id条目并忽略LIKE部分。如果我将LIKE更改为=(并删除%符号),它似乎都起作用了。我也手动输入了一个名字,这是在数据库中,即AND lname LIKE'%smith%',这是一种享受。 – Deano

+0

**您是否确认''_POST ['lname']'包含您认为它所做的事情?** –

回答

-1
  1. 非常感谢您不能直接从PDO连接 变量执行代码。
  2. 这是bindParam没有绑定
  3. 有一个在没有 “结果集” 功能PDO
  4. 要使用bindParam你必须要包住 SQL代码PDO准备追加值功能。

总体代码应该是:

其中
$lname = '%'.$_POST['lname'].'%'; 
$sql=$database->prepare("SELECT * FROM cust WHERE org_id = :org_id AND lname LIKE :lname"); 
$sql->bindParam(':lname',$lname,PDO::PARAM_STR); 
$sql->bindParam(':org_id',$_SESSION['org_id'],PDO::PARAM_INT); 
$sql->execute(); 
$existing=$sql->fetch();//Resultset 

$数据库是一个有效的PDO连接。

+0

我越来越认为你的年龄不再是匆忙和毫无意义的答案的借口。 –

+1

如果你打算只改变一件轻微和毫无意义的事情,但是只是重新发布OP的代码,那么至少应该指出你在那里做了那么小的改变...... –

+0

对不起,我应该提到,即时通讯在这里使用这个类:http: //culttt.com/2012/10/01/roll-your-own-pdo-php-class/我知道这个连接是可以工作的,因为我已经在不同的地方使用它们了。感谢您的帮助,虽然在这 – Deano

0

终于拿到这个排序,在PHP文件,我需要这行只是回声之前添加:

header("Content-Type: application/json", true); 

谢谢大家对你的努力

+0

如果您更好地解释代码和问题,其他用户将得到答案。 – Subin