【问题标题】:PDO PDOStatement always outputs 1 in the endPDO PDOStatement 最后总是输出 1
【发布时间】:2015-05-12 08:30:58
【问题描述】:

我是 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 到底是什么意思?

【问题讨论】:

  • 这是因为你打印了print_r()的返回值 -> echo '&lt;pre&gt;', print_r($result), '&lt;/pre&gt;';
  • 非常感谢我非常感谢您的回答,我不知道这是 print_r 函数。但是所有的反对票是怎么回事?
  • 我认为因为一些人认为,这个问题可以通过阅读关于print_r() 的手册来避免。但最后没人能说清楚,因为人是奇怪的动物,所以你不知道他们为什么投反对票。
  • 感谢您所做的一切!祝你有美好的一天,晚上或下午:)

标签: php mysql arrays pdo


【解决方案1】:

您需要使用print_r($var, 1) 来删除它们并返回字符串而不是true

manual

mixed print_r (mixed $expression [, bool $return = false ])

当返回参数为TRUE时,该函数将返回一个字符串。否则,返回值为 TRUE。

所以只需添加该标志:

echo '<pre>', print_r($affected, 1), '</pre>';
//                               ^ or `true`

【讨论】:

  • 谢谢!我不知道。
  • @Alex 很高兴这有帮助
  • 为什么我被否决了?我做错什么了吗?我来到这里是因为我最终放弃了。
  • @Alex 这里的人没有义务解释他们的反对意见,尤其是对于问题,因为他们是免费的。即使有一些很好的问题,他们也可能毫无理由地被否决
猜你喜欢
  • 1970-01-01
  • 2011-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-12
  • 1970-01-01
  • 2017-01-25
  • 2012-10-12
相关资源
最近更新 更多