2014-03-03 146 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