【问题标题】:how to convert some mysql into pdo [closed]如何将一些mysql转换为pdo [关闭]
【发布时间】:2015-05-26 11:01:49
【问题描述】:

谁能帮我把它转换成 PDO

// verify email and password pair
$userid = 0;
$query = sprintf("SELECT id FROM users WHERE LOWER(email)='%s' AND passwordhash='%s'",strtolower($email),$pwdhash);
$resource = mysql_query($query);
if ($resource)
{
    $row = mysql_fetch_row($resource);
    if (isset($row[0]))
        $userid = $row[0];
}

这是我的尝试:

$userid = 0;
$resource = $dbh->query("SELECT id FROM users WHERE LOWER(email)=':email' AND passwordhash=':hash'");
$resource->bindValue(':email',$email,PDO::PARAM_STR);
$resource->bindValue(':hash',$pwdhash,PDO::PARAM_STR);
if ($resource->execute())
{
    $result = array();
    while ($row = $resource->fetch()) {
        array_push($result, $row);
    }

    if (isset($result[0]))
    $userid = $result[0];

    $dbh = null;
    return $result;
}   

我很确定 if 语句中的部分有问题

还有其他尝试:

    $userid = 0;
    $resource = $dbh->query("SELECT id FROM users WHERE LOWER(email)=':email' AND passwordhash=':hash'");
    $resource->bindValue(':email',$email,PDO::PARAM_STR);
    $resource->bindValue(':hash',$pwdhash,PDO::PARAM_STR);
    if ($resource)
    {
        $row = $resource->fetchAll();
            if (isset($row[0]))
            $userid = $row[0];
    }

    // close database and return 
    $dbh = null;
    return $userid;
}

还有一些尝试......

【问题讨论】:

  • $dbh->prepare 而不是 $dbh->我认为的查询。
  • query 替换为prepare 并删除:email:hash 周围的单引号

标签: php mysql pdo database-administration


【解决方案1】:

试试这个,

使用prepare 而不是query,prepare 的结果是一个语句句柄,可用于将值绑定到您在prepare 中使用的命名参数。

$userid = 0;
$stmt = $dbh->prepare("SELECT id FROM users WHERE LOWER(email)=:email AND passwordhash=:hash");
$stmt->bindValue(':email',$email,PDO::PARAM_STR);
$stmt->bindValue(':hash',$pwdhash,PDO::PARAM_STR);
if ($stmt->execute())
{
    $result = array();
    while ($row = $stmt->fetch()) {
        array_push($result, $row);
    }

    if (isset($result[0]))
    $userid = $result[0];

    $dbh = null;
    return $result;
}   

【讨论】:

  • 这是否意味着我无法将值绑定到查询句柄内的参数
  • 感谢您的回答成功
  • 不,你不能。 $dbh->query() 直接向数据库发出查询,因此您无法修改参数。所以它基本上适用于不需要参数或参数可以像SELECT * FROM table WHERE col1 = 10这样硬编码的简单查询
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-06
  • 1970-01-01
  • 2021-04-15
  • 2014-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多