我尝试了各种各样的东西来让这些短代码工作。它的作用是通过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();
}
?>
每次无论如何都会返回假。
这里似乎有什么问题?
答案 0 :(得分:-1)
实际上,您无法查看使用rowCount函数在DB中选择的记录数。正如我在PHP文档中读到的那样,许多选择查询都不会返回使用rowCount方法查询的行数。请查看以获取更多信息:http://php.net/manual/en/pdostatement.rowcount.php
正如doc所说,你可以使用fetchColumn方法。