这很简单,但出于某种原因,我很难用它。 基本上,我做一个select语句来查找结果。我遍历该结果并更新我在结果中找到的项目。
这是我的代码:
$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()失败:服务器没有为此请求返回响应。
答案 0 :(得分:3)
将变量名称$row
更改为$rows
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); // change variable $row to $rows
foreach ($rows as $row) {
// Your Code
}
答案 1 :(得分:3)
好吧,我不敢相信我们都错过了这个。在更新查询中,您在where子句中使用表达式'id'=:id
。这实际上意味着,如果你的$ id是15 - &gt; 'id'!= 15并且查询永远不会更新表中的任何值。删除id
周围的引号:
$stmt = $pdo->prepare("update licenses
set email=:em, exp_date=:exp where id=:id");