2014-03-03 109 views
0

我想檢查是否通過用戶名是在任何一個3表。如果它是存在的並且將返回true,否則它將返回false。目前它無論如何都會返回true。PHP檢查是否在多個表中的用戶名

$stmt = $conn->prepare("SELECT * FROM Table1 INNER JOIN Table2 INNER JOIN Table3 WHERE Table1.username = :name OR Table2.username = :name OR Table3.username = :name"); 
$stmt->bindParam(':name', $_POST["username"]); 
$num_rows = $stmt->execute(); 

if ($num_rows > 0) 
    { 
    echo "true"; 
    } 
else 
    { 
    echo "false"; 
    } 
+0

'$ num_rows'的值是什麼?從查詢的外觀來看,它不會是一個整數。這將是一組匹配的記錄。我認爲對象本身總是會評估爲「真」或「> 0」。 – David

+1

你爲什麼要加入桌子?在沒有任何條件的情況下沒有出現參加3張桌子的理由。爲什麼不運行3個單獨的查詢? –

回答

0

在這種情況下使用UNION更好。

$sql = 'SELECT 1 FROM Table1 WHERE username = :name 
     UNION 
     SELECT 1 FROM Table2 WHERE username = :name 
     UNION 
     SELECT 1 FROM Table3 WHERE username = :name'; 
$stmt = $conn->prepare($sql); 
$stmt->bindParam(':name', $_POST["username"]); 
$qry = $stmt->execute(); 

if ($stmt->rowCount() == 0) { 
    // no match 
} else { 
    // match 
} 
+0

假設這是PDO,[$ stmt-> execute](http://us1.php.net/manual/en/pdostatement.execute.php)返回一個bool而不是結果集對象。 – Powerlord