powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP&MySQL) Условие с запросом.
25 сообщений из 32, страница 1 из 2
(PHP&MySQL) Условие с запросом.
    #32953105
McLighter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как написать правильно условие, которое проверяет прошел запрос к базе или нет.
if (!mysql_query ("update counters set time='$dates' where ip_adr='$ips'"))
можно ли так?
...
Рейтинг: 0 / 0
(PHP&MySQL) Условие с запросом.
    #32953124
ivan1982
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
Только для операторов SELECT, SHOW, EXPLAIN или DESCRIBE функция
mysql_query() возвращает идентификатор ресурса, 
FALSE если запрос не был выполнен корректно. 
Для других типов SQL-операторов mysql_query() возвращает TRUE при успехе, FALSE при ошибке.
Не-FALSE return-значение означает, что запрос был правильным и может быть 
выполнен на сервере. 
...
Рейтинг: 0 / 0
(PHP&MySQL) Условие с запросом.
    #32953150
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
$sql="INSERT INTO news (header,short,full) VALUES ('$header','$short','$full')" ;
$result = mysql_query($sql) or die (mysql_error());
...
Рейтинг: 0 / 0
(PHP&MySQL) Условие с запросом.
    #32953235
McLighter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так будет работать мой запрос?
...
Рейтинг: 0 / 0
(PHP&MySQL) Условие с запросом.
    #32953283
McLighter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот у меня так

if (!mysql_query ("update counters set last_time='$dates', counter=counter+1 where ip_adr='$ips'"))
{mysql_query("insert into counters values ('','$ips','$dates','1')");}

Update проходит. То что в {} не выполняется.
...
Рейтинг: 0 / 0
(PHP&MySQL) Условие с запросом.
    #32953553
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может тогда так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
// если нет такого ip-адреса
if ( !mysql_num_rows(mysql_query("select count(*) from counters where ip_adr='$ips'")) ) {
	// то вставляем, новую запись
	mysql_query("insert into counters values ('','$ips','$dates','1')");
} else {
	// иначе увеличиваем счетчик
	mysql_query("update counters set last_time='$dates', counter=counter+1 where ip_adr='$ips'");
}
...
Рейтинг: 0 / 0
(PHP&MySQL) Условие с запросом.
    #32953625
McLighter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Berkut спасибо за ответ.
Как это читается mysql_num_rows(mysql_query())
...
Рейтинг: 0 / 0
(PHP&MySQL) Условие с запросом.
    #32953646
McLighter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Точнее говоря как работает это условие. Почему количество записей не сравнивается с 0?
...
Рейтинг: 0 / 0
(PHP&MySQL) Условие с запросом.
    #32953649
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.php.net/manual/ru
Только для запросов SELECT, SHOW, EXPLAIN, DESCRIBE, mysql_query() возвращает указатель на результат запроса, или FALSE если запрос не был выполнен. В остальных случаях, mysql_query() возвращает TRUE в случае успешного запроса и FALSE в случае ошибки. Значение не равное FALSE говорит о том, что запрос был выполнен успешно. Он не говорит о количестве затронутых или возвращённых рядов. Вполне возможна ситуация, когда успешный запрос не затронет ни одного ряда.

Попробовал выполнить Ваш пример и понял суть вопроса :)

Дело в том, что при выполнении запроса
Код: plaintext
update counters set last_time='$dates', counter=counter+ 1  where ip_adr='$ips'
функция mysql_query возвращает true, несмотря на то, что записи фактически не могут быть обновлены при первом вызове для нового $ip_adr. Просто MySQL говорит о том, что запрос был успешно выполнен, но не было затронуто ни одной ячейки. Поэтому надо добавить в условие запроса mysql_num_rows().
...
Рейтинг: 0 / 0
(PHP&MySQL) Условие с запросом.
    #32953661
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
McLighterТочнее говоря как работает это условие. Почему количество записей не сравнивается с 0?

Так оно сравнивается, т.к. mysql_num_rows вернет 0 , а условие !0 даст единицу 1 ... :)
...
Рейтинг: 0 / 0
(PHP&MySQL) Условие с запросом.
    #32953702
McLighter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опять то же самое update работает.
Стираю из базы свой айпишник - ничего не добавляется.
Счетчик не крутится.
...
Рейтинг: 0 / 0
(PHP&MySQL) Условие с запросом.
    #32954045
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
McLighterОпять то же самое update работает.
Стираю из базы свой айпишник - ничего не добавляется.
Счетчик не крутится.

Хм-м, не знаю у меня тест работает... Скорее всего у вас глюк.

> update работает
- он реально вставляет записи в БД или нет; смысл "работает": работает сам запрос update или выполняется условие if ?
...
Рейтинг: 0 / 0
(PHP&MySQL) Условие с запросом.
    #32954711
McLighter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пишу весь скрипт. (почему не работает)
<?php
//счетчик посещений.
$dates=date('Y-m-d H:i:s', time());
$ips=$REMOTE_ADDR;
$id2=mysql_connect("localhost","root","");
mysql_select_db ("document");
if ( !mysql_num_rows(mysql_query("select count(*) from counters where ip_adr='$ips'")) ) {
// то вставляем, новую запись
mysql_query("insert into counters values ('','$ips','$dates','1')");
} else {
// иначе увеличиваем счетчик
mysql_query("update counters set last_time='$dates', counter=counter+1 where ip_adr='$ips'");
}
mysql_close($id2);
?>
<?php
// вывод счетчика
$id=mysql_connect("localhost","root","");
mysql_select_db("document");
$t1=mysql_query("select sum(counter) from counters");
$sums=mysql_fetch_row($t1);
$t2=mysql_query("select counter from counters where ip_adr='$ips'");
$yoursign=mysql_fetch_row($t2);
mysql_close($id);
?>
Всего посещений:<?echo $sums[0];?>
Ваши посещения:<?echo $yoursign[0];?>
...
Рейтинг: 0 / 0
(PHP&MySQL) Условие с запросом.
    #32954873
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Welly

Сори это я ступил... Все правильно.

Просто запрос
Код: plaintext
select count(*) from ...
всегда будет возвращать по крайней мере одну строку, даже если записей нет. Ведь count(*) возвращает кол-во записей, а 0 записей - это уже одна запись... :)

Поэтому надо ставить
Код: plaintext
select ip_adr from ...
...
Рейтинг: 0 / 0
(PHP&MySQL) Условие с запросом.
    #32955438
McLighter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. Теперь все работает. Спасибо. Правда что такое 0 записей это 1 запись я так и не понял.
...
Рейтинг: 0 / 0
(PHP&MySQL) Условие с запросом.
    #32955482
Фотография 4m@t!c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
McLighterДа. Теперь все работает. Спасибо. Правда что такое 0 записей это 1 запись я так и не понял.
Запись - это строка - результат запроса. В этой строке есть поле, в котором подсчитано кол-во записей, удовлетворяющих условию выборки. Так вот это поле будет хранить 0, если не будет найдено ни одной записи. Ясно?
Деревянный пример:
Есть запись "Записей соответсвующих условию = 0". Эта запись - 1 строка. В ней есть ноль.
...
Рейтинг: 0 / 0
(PHP&MySQL) Условие с запросом.
    #32955492
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
McLighterДа. Теперь все работает. Спасибо. Правда что такое 0 записей это 1 запись я так и не понял.
:)

ну вот например:
Код: plaintext
1.
2.
3.
4.
create table t(
 id int);

insert into t values ('1');

Делаем запросы:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
-- записей не найдено
select * from t where id= 2 ;

Empty set ( 0 . 00 ) sec

-- запись найдена (потому что count(*) вычисляет кол-во записей, 
-- удовлетворяющих условию where, в  данном случае таких записей нет,
-- поэтому count(*) вернет 0)
select count(*) from t where id= 2 ;

count(*)
---------
 0 

 1  row in set ( 0 . 00 ) sec
...
Рейтинг: 0 / 0
(PHP&MySQL) Условие с запросом.
    #32955530
McLighter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну теперь все понял.
Осталось только в update добавить условие $dates-last_time > 1часа, тогда все будет просто отлично.
...
Рейтинг: 0 / 0
(PHP&MySQL) Условие с запросом.
    #32955568
Фотография 4m@t!c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
McLighterНу теперь все понял.
Осталось только в update добавить условие $dates-last_time > 1часа, тогда все будет просто отлично.
[off]
гы-гы..... Сегодня смотрел "Осторожно, Модерн!" Так там прапорщик Задов давал выкуп за сына - ... со словами.... все.. все, что было заработано на квартиру отдать придется.. А вдеь не хватало всего 350 000... Теперь снова все сначало собирать все5 350 117 рублей заново собирать....;)))))
[off]
Мак, я думал, что тех топиков, что ты по датам насоздавал должно было хватить...
...
Рейтинг: 0 / 0
(PHP&MySQL) Условие с запросом.
    #32955572
Фотография Black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Berkut
для более быстрой выборки надо использовать select count(*)
...
Рейтинг: 0 / 0
(PHP&MySQL) Условие с запросом.
    #32955582
McLighter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я и не прошу готового решения. Я просто сказал чем буду сейчас заниматься. А как сделать это я и так догадываюсь.
...
Рейтинг: 0 / 0
(PHP&MySQL) Условие с запросом.
    #32955667
McLighter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень извиняюсь, но что всетаки не так:

<?

$id=mysql_connect("localhost","root","");
mysql_select_db("document");

$dates=date('Y-m-d H:i:s', time());
$mes=mysql_query("SELECT UNIX_TIMESTAMP($dates)-UNIX_TIMESTAMP(last_time) from counters");
while($res=mysql_fetch_row($mes))
{echo $res[0];}

mysql_close($id);

?>
...
Рейтинг: 0 / 0
(PHP&MySQL) Условие с запросом.
    #32955793
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Николай aka Motodor2Berkut
для более быстрой выборки надо использовать select count(*)

Задача-то не стояла в такой формулировке.
А насчет select count(*) ..., то не факт.

Потому что * - это могут быть совершенно разные поля таблицы, и их может быть несколько, причем не проиндексованные. Если записей в таблице очень много, то select count(*) работает медленно.

Но утверждать не буду, т.к. сам тестов не делал :)
...
Рейтинг: 0 / 0
(PHP&MySQL) Условие с запросом.
    #32955806
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
McLighterОчень извиняюсь, но что всетаки не так:

<?

$id=mysql_connect("localhost","root","");
mysql_select_db("document");

$dates=date('Y-m-d H:i:s', time());
$mes=mysql_query("SELECT UNIX_TIMESTAMP($dates)-UNIX_TIMESTAMP(last_time) from counters");
while($res=mysql_fetch_row($mes))
{echo $res[0];}

mysql_close($id);

?>
И как можно понять на быстрый взгляд, что не так?
Может как ругается... Что вообще происходит? И как должен работать скрипт?

ЗЫ для удобства читаемости кода на форуме пользуйтесь плиз кнопкой SRC :)
...
Рейтинг: 0 / 0
(PHP&MySQL) Условие с запросом.
    #32955889
Comiljou
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поэтому надо добавить в условие запроса mysql_num_rows().

mysql_num_rows() returns the number of rows in a result set. This command is only valid for SELECT statements. To retrieve the number of rows affected by a INSERT, UPDATE or DELETE query, use mysql_affected_rows().

Так что вредные советы даете батенька
...
Рейтинг: 0 / 0
25 сообщений из 32, страница 1 из 2
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP&MySQL) Условие с запросом.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]