【问题标题】:How to correctly bind a parameter in php mysql statement如何正确绑定php mysql语句中的参数
【发布时间】: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


【解决方案1】:
$p = $database->prepare("SELECT * FROM users WHERE activation_key = ?");
$p->execute(array($your_key));

【讨论】:

  • 对发布的代码进行一些解释,这对其他人有帮助。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    • 2018-03-05
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多