Forum Webscript.Ru
Программирование => PHP => Тема начата: Alex Krychek от 31 Января 2004, 15:37:18
-
Не могу понять из-за чего вылетает MySQL...
ОС: Windows 98 SE
Сервер: Apache Version 1.3.20 (Win32)
PHP Version: 4.0.6
MySQL Version 3.23.34
Суть проблемы:
Делаю сайт на PHP у себа на локальном компе. При загрузке страницы новостей после функции определения количества посетителей стала вылетать ошибка и выгружаться MySQL.
Код:
[начальные теги HTML]
require("config.php"); //имя БД, имя пользователя и др. настройки
require("functions.php"); //функции
$ses_id = dbConnect($db_host_name, $db_user_name, $db_password); //подключение к БД
$result = dbSelect($db_name, $ses_id); //выбор БД
if (!$result) {
echo "DB was not found
\\n";
}
require(\'online.php\');
+---------- | файл online.php |----------+
session_set_cookie_params("0"); //Задаем время жизни cookie
$id=session_id(); //id сессии
$time=time(); //текущее время
$past=time()-500; //время, после которого надо удалять сессии
@mysql_query("DELETE FROM gwmi_online WHERE last_time < \'$past\'"); //Удаление старых сессий
$result=@mysql_query("SELECT last_time FROM gwmi_online WHERE sess_id=\'$id\'"); //Выбор таблицы
$rows=@mysql_num_rows($result); //Если в таблице есть sess_id с $id, то равно 1, иначе 0
if ($rows!="0") {
@mysql_query("UPDATE gwmi_online SET last_time=\'$time\' WHERE sess_id=\'$id\'");
} else {
@mysql_query("INSERT INTO gwmi_online (last_time, sess_id) VALUES (\'$time\', \'$id\')");
}
$result = @mysql_query("SELECT * FROM gwmi_online"); //Выбор всех сессий
$count = @mysql_num_rows($result); //Считывание числа сессий
echo "$count человек on-line
\\n"; //Вывод числа юзеров
+---------------------------------------------+
$newsam = 15;
Потом идет обращение к БД, при котором и происходит ошибка:
$result = mysql_query("SELECT * FROM gwmi_news ORDER BY news_year DESC, news_month DESC, news_day DESC, news_hour DESC, news_min DESC, news_sec DESC LIMIT 0, $newsam");
Структуры таблиц:
CREATE TABLE `gwmi_news` (
`news_id` int(10) unsigned NOT NULL auto_increment,
`news_title` varchar(50) NOT NULL default \'\',
`news_year` int(4) NOT NULL default \'0\',
`news_month` int(2) NOT NULL default \'0\',
`news_day` int(2) NOT NULL default \'0\',
`news_hour` int(2) NOT NULL default \'0\',
`news_min` int(2) NOT NULL default \'0\',
`news_sec` int(2) NOT NULL default \'0\',
`news_autor` varchar(30) NOT NULL default \'\',
`news_text` text NOT NULL,
PRIMARY KEY (`news_id`)
) TYPE=MyISAM;
CREATE TABLE `gwmi_online` (
`hid` int(11) NOT NULL auto_increment,
`sess_id` char(255) NOT NULL default \'\',
`last_time` char(255) NOT NULL default \'\',
PRIMARY KEY (`hid`)
) TYPE=MyISAM;
Помогите разобраться из-за чего это происходит. Если при первом открытии страницы (после запуска сервера и MySQL) закоментарить загрузку online.php, страница загружается без ошибок и вылета MySQL. И если потом разкомментарить обращение к файлу, страница загружается норамльно. Так же если переместить загрузку online.php после загрузки новостей, никаких глюков не наблюдается. online.php нормально работает с другими страницами...
-
для начала удали все собачки из твоего кода. И посмотри есть ли ошибки с запросами.
Во-вторых точно процитируй ошибку и покажи строку, в которой она появляется
ЗЫ
Alex Krychek:
`news_year` int(4) NOT NULL default \'0\',
`news_month` int(2) NOT NULL default \'0\',
`news_day` int(2) NOT NULL default \'0\',
`news_hour` int(2) NOT NULL default \'0\',
`news_min` int(2) NOT NULL default \'0\',
`news_sec` int(2) NOT NULL default \'0\',
а в одном поле хранить дату наверное неудобно ;)
-
С собачками, без собачек - один фиг. Я их поставил после...
Ошибка такая:
Mysqld-opt
This program has performed an illegal operation and will be shut down. и т.д. (обратиться к разработчику, если проблема повторяться будет)
Details >>
MYSQLD-OPT caused an invalid page fault in
module MYSQLD-OPT.EXE at 017f:0045dbee.
Registers:
EAX=00000000 CS=017f EIP=0045dbee EFLGS=00010287
EBX=00000001 SS=0187 ESP=0179f73c EBP=00000300
ECX=00000000 DS=0187 ESI=00a04100 FS=7f7f
EDX=00a922d0 ES=0187 EDI=00000000 GS=0000
Bytes at CS:EIP:
39 11 75 3b 33 d2 8a 51 14 f6 d2 33 db 81 e2 ff
Stack dump:
00000020 00000005 00a91090 00000001 0045da27 00a04100 00a91090 00000005 00000000 00a04810 01445770 00a04100 00000000 0045dc61 00a04810 00a04100
P.S.
Разговор сейчас не о дате...
-
Кстати, скрипт определения количества юзеров я взял с этого сайта.
-
После замены в БД типа поля last_time на int(100) ошибка больше не появлялась. Но надолго ли?..
-
Alex Krychek , увы, на этом сайте, за неимением лучшего, публикуют скрипты от полных идиотов.
И ты взял как раз такой.
Мой тебе совет, от чистого сердца.
Пиши программы сам.
И при этом ты должен очень хорошо понимать, что делает каждая строчка в твоей программе.
Только тогда твои программы будут работать и ты сам сможешь находить в них ошибки.
Удачи.
-
Да я в основном так и делаю. И этот скрипт я уже перписал.
-
кхмммм...
если ты имеешь в виду собачек, то изменил ты скрипт не в лучшую сторону, да...
и, если ты переписал, то не надо тогда упоминать, что ты взял его на этом сайте :-)
-
Я не имел в виду собачек. А переписал я уже после того, как глюки эти появились.
-
быстро, однако :-)
и даже все эти сессион_ид и сессион_старт убрал?