如何正确绑定php mysql语句中的参数

时间:2014-09-11 02:07:18

标签: php mysql sql pdo where-clause

我正在尝试开发一个用于创建帐户的确认系统,问题是,如果我在语句的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在数据库中,然后按照我的预期运行。

编辑:  我的问题是我的哈希算法和数据库列长度,我发布了自己的答案,并将在两天内将其标记为堆栈溢出允许。

2 个答案:

答案 0 :(得分:0)

$p = $database->prepare("SELECT * FROM users WHERE activation_key = ?");
$p->execute(array($your_key));

答案 1 :(得分:0)

我找到了问题的答案,问题不在于我如何绑定参数,而是因为我的哈希算法试图存储一个激活密钥,其长度更大比数据库中允许的数量少。我注意到这是使用var_dump(),谢谢你们的建议,并抱歉浪费你的时间。