尝试将我所有的旧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
}
答案 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) {
代替。