如果用户名存在,PHP返回值

时间:2014-02-19 12:18:19

标签: php mysql

我遇到的问题是无论传入的用户名是否有效,它总是返回true。

$data = array($_POST["username"]);
$db = new PDO('mysql:host=localhost;dbname=Example;charset=utf8', 'Example', 'Example');
$stmt = $db->prepare("SELECT * FROM Table WHERE username=?");
$num_rows = $stmt->execute($data);

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

5 个答案:

答案 0 :(得分:1)

$stmt->execute($data)成功返回TRUE

如果您想获得返回的行数,则需要在fetchAll

之后使用execute

答案 1 :(得分:0)

使用SQL功能

SELECT COUNT(*) as uCount FROM Table WHERE username=? // you can change * to id, for example.

然后检查if($data['uCount'] > 0)

答案 2 :(得分:0)

您可以稍微更改一下SQL语句,并以查询结果的形式捕获true或false。

SELECT count(username) > 0 as user_exists FROM Table WHERE username=?

阅读查询结果,以查找它是true还是false

答案 3 :(得分:0)

PDOStatement::execute()返回一个布尔值来表示成功;如果您正在使用异常错误处理,它将始终返回true或抛出异常(由您真正推荐)。

您可以像这样获取结果(假设只有一个):

if (($data = current($stmt->fetchAll(PDO::FETCH_ASSOC)) !== false) {
    echo "yay";
    // do stuff with $data
} else {
    echo "sorry dude";
}

使用current()会返回返回结果集的第一个元素,如果没有,则返回false

<强>更新

如果您只需要返回truefalse,最好这样做:

$stmt = $db->prepare("SELECT COUNT(*) FROM Table WHERE username=?");
if ($stmt->execute($data) && current($stmt->fetchAll(PDO::FETCH_COLUMN))) {
    echo 'true';
} else {
    echo 'false';
}

答案 4 :(得分:-1)

试试这个

$num_rows = $stmt->fetch(PDO::FETCH_NUM);