PDO PDOStatement 最后总是输出 1
PDO PDOStatement always outputs 1 in the end
我是 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($var, 1)
来删除那些和 return 字符串而不是 true
。
在manual中:
mixed print_r ( mixed $expression [, bool $return = false ] )
When the return parameter is TRUE, this function will return a string. Otherwise, the return value is TRUE.
所以只需添加该标志:
echo '<pre>', print_r($affected, 1), '</pre>';
// ^ or `true`
我是 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($var, 1)
来删除那些和 return 字符串而不是 true
。
在manual中:
mixed print_r ( mixed $expression [, bool $return = false ] )
When the return parameter is TRUE, this function will return a string. Otherwise, the return value is TRUE.
所以只需添加该标志:
echo '<pre>', print_r($affected, 1), '</pre>';
// ^ or `true`