我是PDO的新手,一直在检查一些答案,但找不到答案。出于某种原因,PDOStatement对象最终总是输出1。
例如,当我这样做时
$username = 'Alexander';
$sql = "
SELECT username, email FROM user
WHERE
username = :username;
";
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':username', $username);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
echo '<pre>', print_r($result), '</pre>';
输出
Array
(
[username] => Alexander
[email] => alex@live.com
)
1
注意到最后的1。例如,当我使用rowCount()进行检查时 更新语句后受影响的行我得到类似这样的内容
$username = 'martin';
$sql = "
UPDATE user
SET
username = :username
WHERE id = 1;
";
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':username', $username);
$stmt->execute();
$affected = $stmt->rowCount();
echo '<pre>', print_r($affected), '</pre>';
现在这不仅输出1而且输出11因为最后的额外1总是存在,无论如何。如果我再次进行查询,我不仅会得到0而且会得到01.这是正常的吗?我怎样才能再次区分0,1和01,因为每次基本上都有额外的1。我不明白这种行为,到底这个额外的1究竟是什么意思?
答案 0 :(得分:3)
您需要使用print_r($var, 1)
来删除这些内容并返回字符串而不是true
。
在manual:
混合print_r(混合$表达式 [,bool $ return = false] )
当return参数为TRUE时,此函数将返回一个字符串。否则,返回值为TRUE。
所以只需添加该标志:
echo '<pre>', print_r($affected, 1), '</pre>';
// ^ or `true`