我正在尝试开发一个用于创建帐户的确认系统,问题是,如果我在语句的where子句中放置一个参数,它不会返回所需的结果,但如果我烧掉了我的值我正在测试它是否有效。所以我的问题是如何在mysql php语句中正确设置和绑定参数?这是我到目前为止所尝试的内容:
$activation_key = htmlentities($_GET['activation_key']);
$sql_stmt = "SELECT email, activation_key, is_active FROM users WHERE activation_key = :activation_key";
$query_params = array(
':activation_key' => $activation_key
);
try
{
$stmt = $db->prepare($sql_stmt);
$stmt->bindParam(':activation_key', $activation_key, PDO::PARAM_STR);
$result = $stmt->execute();
}
catch(PDOException $ex)
{
die("Failed to run query: " . $ex->getMessage());
};
$row = $stmt->fetch();
print_r($row);
print_r($stmt);
print_r($result);
上面的代码打印语句,结果为1,但不打印行。但是,如果我将语句设置为类似
$sql_stmt = "SELECT email, activation_key, is_active FROM users WHERE activation_key = 'somekey'";
确实somekey在数据库中,然后按照我的预期运行。
编辑: 我的问题是我的哈希算法和数据库列长度,我发布了自己的答案,并将在两天内将其标记为堆栈溢出允许。
答案 0 :(得分:0)
$p = $database->prepare("SELECT * FROM users WHERE activation_key = ?");
$p->execute(array($your_key));
答案 1 :(得分:0)
我找到了问题的答案,问题不在于我如何绑定参数,而是因为我的哈希算法试图存储一个激活密钥,其长度更大比数据库中允许的数量少。我注意到这是使用var_dump(),谢谢你们的建议,并抱歉浪费你的时间。