PDO PDOStatement总是输出1

时间:2015-05-12 08:30:59

标签: php mysql arrays pdo

我是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究竟是什么意思?

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`