0

这很简单,但由于某种原因,我很难处理它。基本上,我做一个选择语句来查找结果。我遍历该结果并更新我在结果中找到的项目。

这是我的代码:

$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

$stmt = $pdo->prepare("select * from licenses where email='empty' limit $quantity");
$stmt->execute();
$row = $stmt->fetchAll(PDO::FETCH_ASSOC);


if ($stmt->rowCount() > 0)
{
    $stmt = $pdo->prepare("update licenses set email=:em, exp_date=:exp where 'id'=:id");

    foreach ($row as $row)
    {
        $expires = date("Y-m-d", strtotime('+365 days'));
        $license = $row['license_key'];
        $lid = $row['id'];

        echo $license . '<br> ID:' . $lid;

        $stmt->bindValue(':em', $email1, PDO::PARAM_STR);
        $stmt->bindValue(':exp', $expires, PDO::PARAM_STR);
        $stmt->bindValue(':id', $lid, PDO::PARAM_INT);

        $stmt->execute();
    }

此代码有效,它在工作状态下更新我的数据库。但是,该网站返回 504 错误,并且未显示许可证的输出。有谁知道这段代码有什么问题,或者我该如何完成我的目标?

** 编辑:当我使用 fiddler 时,我收到此错误:[Fiddler] ReadResponse() failed: The server did not return a response for this request。

4

2 回答 2

3

将变量名更改$row$rows

$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); // change variable $row to $rows
foreach ($rows as $row) {
  // Your Code
}
于 2013-08-24T12:46:34.593 回答
3

好吧,我不敢相信我们都错过了这个。在您的更新查询中,您'id'=:id在 where 子句中使用表达式。这实际上意味着如果您的 $id 是 15 -> 'id' != 15 并且查询将永远不会更新表中的任何值。删除周围的引号id

$stmt = $pdo->prepare("update licenses 
            set email=:em, exp_date=:exp where id=:id");
于 2013-08-24T22:05:16.710 回答