PDO rowCount 和 fetchColumn 都没有返回正确的结果


PDO rowCount and fetchColumn both not returning correct result

我已经尝试了各种方法来使这短短的代码工作。它的作用是通过PDO连接到数据库,然后选择与post变量匹配的所有行。如果行数超过 0,请将许可证密钥行更新为"已使用"并回显 true。

我已经尝试了 sql 的行计数和 fetchcolumn 和 count(*),但没有显示出任何差异。在MySQL本身中,我使用了有效的许可证密钥,它确实返回了一行。

<?php
if(isset($_POST['licensekey'])) {
try {
    $db = new PDO("mysql:host=localhost;dbname=validation", "test", "test");
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
    die($e->getMessage());
}
$search = ("SELECT * FROM validated WHERE activationkey=:lk AND used='0'");
$result = $db->prepare($search);
$result->bindParam(":lk", $_POST['licensekey']);
$result->execute();
if($result->rowCount() > 0) {
    $used = ("UPDATE validated SET used='1' WHERE validated.activationkey=:lk");
    $result2 = $db->prepare($used);
    $result2->bindParam(":lk", $_POST['licensekey']);
    $result2->execute();
    echo "true";
} else {
    echo "false";
}
$db = null;
} else {
    exit();
}
?>

每次无论如何它都会返回假。

这里似乎有什么问题?

实际上,

您无法看到使用rowCount函数在数据库中选择了多少条记录。正如我在 PHP 文档中读到的那样,许多选择查询不会返回受 rowCount 方法查询影响的行数。查看更多信息 : http://php.net/manual/en/pdostatement.rowcount.php

正如文档所说,您可以使用 fetchColumn 方法。