【发布时间】:2014-09-11 02:07:17
【问题描述】:
我正在尝试开发一个用于创建帐户的确认系统,问题是如果我在语句的 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 在数据库中,然后它按我的预期运行。
编辑: 我的问题在于我的哈希算法和数据库列长度,我发布了自己的答案,并将在两天内将其标记为堆栈溢出允许。
【问题讨论】:
-
$row产生了什么? -
$activation_key 包含什么?
-
提示:始终开启错误报告
error_reporting(E_ALL); ini_set('display_errors', '1'); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); -
是的,
var_dump($activation_key)在绑定到语句之前会产生什么?
标签: php mysql sql pdo where-clause