PHP PDO如何包含fetch assoc和numrows

时间:2012-09-07 20:03:12

标签: php mysql database pdo

尝试将我所有的旧mysql_*操作转换为新的,并且从我所听到的,改进了PDO,但这个查询似乎无法成功运行,我试图从表PEOPLE中选择所有username = $ username(之前已声明为$username = $_SESSION['username'];

$query = "SELECT  * FROM people WHERE username=?";
$stmt = $conn->prepare($query);
$stmt->bindParam(1, $username);   
$stmt->execute();
$num_rows = $stmt->fetchColumn();

if ($num_rows == 1) {
    // ...
}

工作代码是:

$query = "SELECT  * FROM people 
             WHERE username=?";
$stmt = $conn->prepare($query);
$stmt->bindParam(1, $username);   
$stmt->execute();
$num_rows = $stmt->fetchColumn();
$user = $stmt->fetchObject();

if ($user) {

//do something

}

4 个答案:

答案 0 :(得分:2)

$stmt->fetchColumn无法获取行数;在这种情况下,它将从结果集的第一行获取第一列。由于这通常不会等于1,因此您的测试将失败。

在这种情况下,也没有必要计算返回行的数量,因为您期望一个或零(如果用户名不存在)。所以你可以这样做:

$stmt->execute();
$user = $stmt->fetchObject();
if (!$user) {
    // not found
}
else {
    echo "User $user->username found!";
}

if(!$user)测试有效,因为如果没有要提取的行$user将是false(请参阅fetchObject的文档。)

答案 1 :(得分:2)

$query = "SELECT * FROM people WHERE username = :username";
$stmt = $conn->prepare($query);
$stmt->bindParam(':username', $username);   
$stmt->execute();

while ($row = $stmt->fetchObject()) {
    // do stuff
}

答案 2 :(得分:2)

使用PDOStatement::rowCount作为num_rows,使用PDOStatement::fetch(PDO::FETCH_ASSOC)作为fetch_assoc等效。

答案 3 :(得分:1)

你想要

if ($stmt->num_rows == 1) {

代替。