FOREACH和UPDATE mysql不能一起工作

时间:2012-09-07 06:21:10

标签: php mysql sql

我似乎无法使用此代码。你可以使用foreach行运行另一个查询吗?这是一个发送电子邮件的cron脚本,我需要在cron运行时将状态从“0”更新为“1”,以便我知道电子邮件已发送 - 下面的代码 UPDATE查询不起作用。

// Connect to the database
$conn = new PDO("mysql:host=$DB_HOST;dbname=$DB_DATABASE",$DB_USER,$DB_PASSWORD);

// Get the emails to send and ensure the status shows they have not been sent already
$stmt = $conn->prepare("SELECT id, userid, title, message FROM reminders WHERE time=CURDATE() AND status='0'");
$stmt->execute();
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach($results AS $row){
echo $row['title'] . ' ' . $row['message'] . ' ' . $row['id'] . '<br />';
$update = $conn->prepare("UPDATE results SET status='1' WHERE id=:id");
$update->bindParam(':id', $row['id']);
$update->execute();
};

编辑:表名错了。解决

3 个答案:

答案 0 :(得分:4)

如何指定值的数据类型(我认为[不确定]默认数据类型是字符串而服务器会自动解析它)? PDO::PARAM_INT

$update->bindValue(':id', $row['id'], PDO::PARAM_INT);

<强> PDO Predefine Constants

答案 1 :(得分:2)

也许您需要bindValue并指定数据类型:

$update = $conn->prepare("UPDATE results SET status=1 WHERE id=:id");
$update->bindValue(':id', $row['id'], PDO::PARAM_INT);
$update->execute();

答案 2 :(得分:0)

只是要在问题中找到正确的解决方案 - 答案格式:

您正在使用结果变量resuls,然后尝试更新表results。您要更新的表是否真的命名为“结果”,或者是否已从变量名称中删除此信息?

从查询中看起来您正在使用表格reminders