我遇到的问题是无论传入的用户名是否有效,它总是返回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";
}
答案 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
。
<强>更新强>
如果您只需要返回true
或false
,最好这样做:
$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);