Мой код здесь
$query = "SELECT * FROM `table`";
$result = mysql_query($query);
$arr = array();
while($info = mysql_fetch_array($result)) {
if (!in_array($info['row'], $arr)) {
$arr[] = $info['row'];
}
}
foreach ($arr as $v) {
$pass = "pass";
$query2 = "UPDATE `table` SET pass = '$pass' WHERE row = '$v'";
$result2 = mysql_query($query2);
}
он обрабатывается в течение 2 минут, и ничего не происходит в db. где я могу ошибаться?
Спасибо
EDIT: ОК, я нашел свою ошибку. Речь идет о коде, который я написал для создания случайного прохода, который я не включил в мой вопрос. спасибо всем тебе
Одна из возможностей заключается в том, что у вас заканчивается память: сохраняя все строки в массиве, вам нужно много памяти, прежде чем вы даже попадете в часть обновления - в этом случае это полностью объясняет, почему вы не видите никаких изменений; script никогда не попадает в эту часть.
Другая возможность заключается в том, что ваш script работает слишком долго и останавливается. В зависимости от конфигурации вашего сервера в этом случае может быть опция set_time_limit.
Однако эффект script, который вы нам показываете, точно такой же, как этот единственный запрос:
UPDATE `table` SET pass = 'pass'
так как у вас нет условий для строк в элементе выбора, и единственная фильтрация, которую вы делаете, состоит в том, чтобы не хранить несколько строк с тем же значением в столбце строки, - но когда вы переходите к пропуску обновления, вы определяете каждый строка через столбец строк, то есть он обновит все строки с тем же значением в столбце строки. Если значения строк уникальны для каждой строки, тогда нет необходимости проверять, что вы уже видели строку; если он не уникален, тогда при обновлении вам нужны другие критерии.
Если вы запустите обновление напрямую, PHP не потребуется использовать тонну памяти, и MySQL не будет искать каждую отдельную строку во время обновления; он может просто перебирать их всех за один раз. Если вы не оставите что-то здесь, вам будет намного лучше, просто сделав этот простой запрос.