Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ошибка MySQL при добавлении/обновлении данных!
 
 автор: North-E   (22.11.2006 в 16:18)   письмо автору
 
 

Привет всем!

У меня проблема. Существует Интернет-магазин с MySQL, в таблицах хранится разная инфа о продаваемой музыке, покупках посетителей и т.д. Раньше всё работало нормально, но где-то в последний месяц на сервере периодически стали возникать ошибки при использовании UPDATE / INSERT вида:


INSERT INTO tracks SET artist_id = '2332', singer_id = '248', album_id = '4332', name = 'track N1': Can't lock file (errno: 11)


Хотелось бы выяснить, что это за ошибка, причину ошибки и устранить её. Мне кажется, что это может быть связано с ежедневно увеличивающимся числом обращений к базе. Необходимо ли осуществлять блокировку конкретной таблицы (на чтение, запись?) при всех запросах на изменение/добавление данных в эту таблицу? Или здесь дело в другом?
Спасибо за внимание...буду очень признателен за любую оказанную поддержку!

   
 
 автор: cheops   (22.11.2006 в 16:33)   письмо автору
 
   для: North-E   (22.11.2006 в 16:18)
 

Вы испльзуете оператор LOCK?

   
 
 автор: North-E   (22.11.2006 в 16:57)   письмо автору
 
   для: cheops   (22.11.2006 в 16:33)
 

Для работы с MySQL используется специальный класс. Функции класса, которая осуществляет операции UPDATE/DELETE, представлена в коде:


    function set($table, $fields, $id = false)
    {
        if ($this->con === false)
            $this->connect();
        $q = $id !== false ? "UPDATE $table SET " : "INSERT INTO $table SET ";
        for ($i = 0; list($name, $value) = each($fields); $i++)
        {
            if(is_array($value))
                continue;

            if ($value === false)
                $q .= ($i?", ":"")."$name = NULL";
            else
                $q .= ($i?", ":"")."$name = '".addslashes($value)."'";
        }
        if ($id !== false)
            $q .= " WHERE id = $id";
            
        if (!mysql_query($q, $this->con))
        {
            echo "$q: ".mysql_error($this->con);
            return false;
        }
        else
        if ($id === false)
            return mysql_insert_id($this->con);
        else
            return $id;
    }


Нигде в пределах класса оператор LOCK не используется, так же как не используется при непосредственном вызове функции set из исполняемого скрипта.

   
 
 автор: cheops   (23.11.2006 в 00:41)   письмо автору
 
   для: North-E   (22.11.2006 в 16:18)
 

А таблица tracks какого типа?

   
 
 автор: North-E   (23.11.2006 в 11:15)   письмо автору
 
   для: cheops   (23.11.2006 в 00:41)
 

Все таблицы типа MyISAM.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования