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

时间:2016-04-24 22:23:43

标签: php pdo

我尝试了各种各样的东西来让这些短代码工作。它的作用是通过PDO连接到数据库,然后选择与post变量匹配的所有行。如果有超过0行,请将licensekey行更新为“used”并回显true。

我已经为sql尝试了rowcount和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();
}
?>

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

这里似乎有什么问题?

1 个答案:

答案 0 :(得分:-1)

实际上,您无法查看使用rowCount函数在DB中选择的记录数。正如我在PHP文档中读到的那样,许多选择查询都不会返回使用rowCount方法查询的行数。请查看以获取更多信息:http://php.net/manual/en/pdostatement.rowcount.php

正如doc所说,你可以使用fetchColumn方法。