2012-07-19 105 views
0

我有以下SQL語句,可以完美運行,並因爲我傳送一切PDO,我已經有最壞的時候試圖轉換這個複雜的語句。這是工作如下:轉換複雜的SQL語句PDO

$sql_res=mysql_query("SELECT a.first_name, a.last_name, a.uid, a.hometown, 
IF(b.friend_two IS NULL, 0, 1) AS isFriend FROM users a LEFT JOIN friends 
b ON a.uid = b.friend_two AND b.friend_one = $uid WHERE 
CONCAT(a.first_name, ' ', a.last_name) LIKE '%$q%' AND a.uid <> $uid 
ORDER BY isFriend DESC"); 

我一直在嘗試了幾個小時轉換,這是所有我可以從另一個SO範例中得到(它甚至還沒有接近的工作)

任何幫助奇妙欣賞。哦,還有$ q是來自用戶的POST變量,所以對我來說PDO是必須的。

更新的代碼(第二次):

$sql = "select a.first_name, a.last_name, a.uid, a.hometown, 
IF(b.friend_two IS NULL, 0, 1) AS isFriend FROM users a LEFT JOIN 
friends b ON a.uid = b.friend_two AND b.friend_one = :friend_one 
where (first_name like concat('%', :fname, '%') or last_name like 
concat('%', :lname, '%')) and a.uid <> :uid ORDER BY isFriend DESC"; 
$stmt= $db->prepare($sql); $stmt->bindValue(':fname', "%$q%", PDO::PARAM_STR); 
$stmt->bindValue(':lname', "%$q%", PDO::PARAM_STR); 
$stmt->execute(array(':friend_one' => $uid,':uid' => $uid)); 

這工作沒有任何錯誤,但不能產生相同的結果與原來的SQL語句。

+1

它是如何 「不工作」? – 2012-07-19 22:28:51

+0

@Marc B:PDO可能會非常棘手的調試,因爲你不能總是看到返回的錯誤 – sdjuan 2012-07-19 22:30:57

+0

PDO錯誤號和ERRCODE還不夠嗎?我同意這是困難的,如果這些都沒有說什麼,但即使沒有檢查他們只是懶惰... – 2012-07-19 22:31:53

回答

0

去除多餘的from,並把周圍的名稱過濾器(),爲
A OR B AND C = A OR (B AND C),我客串你想(A OR) B AND C

select 
    a.first_name, 
    a.last_name, 
    a.uid, 
    a.hometown, 
    IF(b.friend_two IS NULL, 0, 1) AS isFriend 
FROM users a 
LEFT JOIN friends b 
    ON a.uid = b.friend_two AND b.friend_one = :uid 
where 
    (
    first_name like concat('%', :fname, '%') or 
    last_name like concat('%', :lname, '%') 
) and 
    a.uid <> :uid 
ORDER BY 
    isFriend DESC 
+0

感謝您的回答Puggan。這是我的代碼,它是如此接近$ SQL =「選擇 a.first_name, a.last_name, a.uid, a.hometown, IF(b.friend_two IS NULL,0,1)isFriend FROM用戶a LEFT JOIN朋友b ON a.uid = b.friend_two AND b。friend_one =:UID 其中 ( first_name的像的concat( '%',:FNAME, '%')或 last_name的像的concat( '%',:L-NAME, '%') )和 a.uid <> '1' ORDER BY isFriend DESC「; $ stmt = $ db-> prepare($ sql); $ stmt-> bindValue(':fname','%$ q%',PDO :: PARAM_STR); $ stmt-> bindValue(':lname','%$ q%',PDO :: PARAM_STR); $ stmt-> execute(array(':uid'=> $ uid)); – user1011713 2012-07-19 22:52:24

+0

但是我最終出現錯誤,「Mysql_fetch_array()期望參數1是資源,給定的對象」。我仍然不明白我在做什麼錯。 – user1011713 2012-07-19 22:52:59

+0

?,'mysql_fetch_array()'不是PDO函數 – 2012-07-19 23:04:59