2013-10-24 161 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