我正在尝试创建一个PHP脚本,当另一个表中的日期值大于或等于当前日期时,该脚本将使用“1”更新一个表。这基于两个表中都存在的id字段。我测试了以下代码但没有成功 - 它为foreach循环提供了一个错误:
<?php
$db_conn = mysql_connect('localhost', '***', '****');
mysql_select_db('db', $db_conn);
$info = mysql_query("SELECT * FROM user_profiles");
$fetch = mysql_fetch_array($info);
foreach($fetch['user_id'] as $id) {
$result = mysql_query("SELECT id
FROM users
WHERE EXISTS (
SELECT user_id
FROM user_profiles
WHERE DATE(profile_value) >= DATE(NOW())
AND users.id = user_profiles.user_id)", $db_conn);
while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$user_del_result = mysql_query("UPDATE users.block
WHERE user_id = {$row['user_id']}
SET block ='1'
LIMIT 1", $db_conn);
}
}
?>
两个表都包含相同数量的行(用户)。
任何帮助都会很棒。
修改
我已将其缩小到以下内容:
<?php
$db_conn = mysql_connect('localhost', '***', '****');
mysql_select_db('db', $db_conn);
$info = mysql_query("SELECT * FROM user_profiles");
$fetch = mysql_fetch_array($info);
while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$user_del_result = mysql_query("UPDATE users
WHERE user_id = {$row['id']}
AND WHERE Date(profile_value ) >= DATE(NOW())
SET block ='1'", $db_conn);
}
?>
但是现在抛出以下错误: 警告:mysql_fetch_array()期望参数1为资源,在第10行的C:\ xampp \ htdocs \ Job.php中给出null
好的,现在我很困惑......
<?php
$db_conn = mysql_connect('localhost', '', '');
mysql_select_db('_db', $db_conn);
while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$result = mysql_query("SELECT id
FROM users
WHERE EXISTS (
SELECT user_id
FROM user_profiles
WHERE DATE(profile_value) >= DATE(NOW())
AND users.id = user_profiles.user_id)", $db_conn);
$user_del_result = mysql_query("UPDATE users
WHERE user_id = {$row['id']}
AND WHERE Date(profile_value ) >= DATE(NOW())
SET block ='1'", $db_conn);
}
?>
错误 警告:mysql_fetch_array()期望参数1为资源,第14行的C:\ xampp \ htdocs \ Job.php中给出布尔值
答案 0 :(得分:0)
您没有正确使用foreach
声明。您应该像以下一样使用它:
foreach ($fetch as $user)
$user
将包含您的用户记录;然后您可以访问$user['id']
等用户列。
目前,您在foreach
语句中使用的是数组键,而不是数组,这就是它可能会抛出错误的原因。
另外,我相信基于另一个表更新表可以在纯SQL中完成,你不必涉及PHP和这么多的查询。