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

Форум MySQL

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

 

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

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

тема: ошибка Duplicate entry
 
 автор: FaStY   (09.03.2006 в 18:23)   письмо автору
 
 

вот скрипт:

<?php 
require_once 'MP3/Id.php'
include(
'../../inc/config.php');
set_time_limit(0); 
function 
read_dir($dir

        if (
$path opendir($dir)) //открываем папку 
        

    
//          echo "<table width=100% border=1 align=center>"; 
              
while ($file_name readdir($path)) //смотрим содержимое папки 
              

                      
//нам не нужны папки "." и ".." 
                      
if (($file_name !== '.') && ($file_name !=="..")) 
                      { 
                              
//если "файл" - папка, то 
                              
if (is_dir($dir."/".$file_name)) 
                              { 
            
                                      
read_dir ($dir."/".$file_name); 
  
//                                    echo "</table></td></tr>"; 
                              

                              
//а если не папка, то просто выводим его имя 
       
else { echo "$dir/[$file_name]<br>"
                                       
// Создаем объект, читаем файл 
  
$id3 = &new MP3_Id(); 
$result $id3->read($dir.'/'.$file_name); 
if (
PEAR::isError($result)) { 
die(
$result->getMessage() ); 

// Ошибкаr "Tag not found" игнорируется 
if (PEAR::isError($result) && $result->getCode() !== PEAR_MP3_ID_TNF) { 
die(
$result->getMessage() ); 


$result $id3->study(); 
if (
PEAR::isError($result)) { 
die(
$result->getMessage()  ); 

$artist=$id3->getTag('artists'); 
$album=$id3->getTag('album'); 
$name=$id3->getTag('name'); 
$year=$id3->getTag('year'); 
$genre=$id3->getTag('genre'); 
$mode=$id3->getTag('mode'); 
$filesize=$id3->getTag('filesize');     
    
//    
             
        
$artist str_replace("'","'",$artist); 
     
$album str_replace("'","'",$album); 
          
$name str_replace("'","'",$name); 
     
$file_name str_replace("'","'",$file_name); 
          
$genre str_replace("'","'",$genre); 
print  
$artist.'<br>';   
//
     //добавляем пользователя в базу
         
$query="SELECT * FROM media_artists WHERE name='$artist'";
           
$ath mysql_query($query);
             
$auth mysql_fetch_array($ath);
         if(@
$auth)
{
  
$nameartist=$auth[id];
}else{
$query="INSERT INTO media_artists (id, name) VALUES(NULL, '$artist' )";
 if(!
mysql_query($query)) echo("Ошибка при добавлении нового исполнителя".mysql_error());
   
$nameartist mysql_insert_id();
}
$arr=explode("../../"$dir);
$dir1=$arr[1];

//данные в базу
 
 
$query_author "INSERT INTO media_mp3 (id,
           singer,
           album,
           song,
           year,
           genre,
           mode,
           size,
            path,
            filename,
     date,
     category)  VALUES(NULL,
           '
$nameartist',
           '
$album',
           '
$name',
           '
$year',
           '
$genre',
           '
$mode',
           '
$filesize',
            '
$dir1',
            '
$file_name',
     NOW(),
     '
$category') ";
 if(!
mysql_query($query_author)) echo("Ошибка при добавлении нового исполнителя".mysql_error());

   
// 
 


                      
}           
                      } 
              } 
  
//            echo "</table>"; 
        


read_dir('../../music'); 
?> 

после 127 загрузки в базу у меня выдает ошибку:
Ошибка при добавлении нового исполнителяDuplicate entry '127' for key 1../../music/Зарубежная музыка/A/Anouk/[Anouk - You Being You.mp3]
Что она означает и как ее справить?

   
 
 автор: Artemy   (09.03.2006 в 18:31)   письмо автору
 
   для: FaStY   (09.03.2006 в 18:23)
 

Это означает что повторяется id, а так как у этого поля стоит autoincrement, то возникает ошибка.
Хм... Попробуйте переписать запрос к базе на этот
INSERT INTO media_mp3 (singer, 
           album, 
           song, 
           year, 
           genre, 
           mode, 
           size, 
            path, 
            filename, 
     date, 
     category)  VALUES('$nameartist', 
           '$album', 
           '$name', 
           '$year', 
           '$genre', 
           '$mode', 
           '$filesize', 
            '$dir1', 
            '$file_name', 
     NOW(), 
     '$category')

   
 
 автор: Trianon   (09.03.2006 в 18:35)   письмо автору
 
   для: Artemy   (09.03.2006 в 18:31)
 

И чем Вам первичный ключ помешал...

   
 
 автор: Artemy   (09.03.2006 в 18:42)   письмо автору
 
   для: Trianon   (09.03.2006 в 18:35)
 

Если у поля id стоит autoincrement, то при добавление, записи в таблицу, это поле вообще можно не учитывать!!!

   
 
 автор: Trianon   (09.03.2006 в 18:58)   письмо автору
 
   для: Artemy   (09.03.2006 в 18:42)
 

тоже верно. Прошу прощения, не подумал.

   
 
 автор: FaStY   (09.03.2006 в 19:22)   письмо автору
 
   для: Artemy   (09.03.2006 в 18:31)
 

так у меня не здесь ошибка выдате, а ошибка в добавлении артиста.

   
 
 автор: Trianon   (09.03.2006 в 18:32)   письмо автору
 
   для: FaStY   (09.03.2006 в 18:23)
 

а какова структура таблицы?
Поле id является auto_increment?

   
 
 автор: FaStY   (09.03.2006 в 19:21)   письмо автору
 
   для: Trianon   (09.03.2006 в 18:32)
 

да, является
таблица media_artists включает 2 поля: Id и name
а таблица Media_mp3 все поля, которые в запросе(INSERT ...)

   
 
 автор: cheops   (09.03.2006 в 19:47)   письмо автору
 
   для: FaStY   (09.03.2006 в 19:21)
 

Выберите тип для id с большим объёмом памяти, т.е. вместо INT(1), BYTE выберите что-нибудь более объёмное, например, INT или BIGINT.

   
 
 автор: FaStY   (09.03.2006 в 20:31)   письмо автору
 
   для: cheops   (09.03.2006 в 19:47)
 

поставил, но ничего :(
вот база:

CREATE TABLE 'media_artists' (
  'id' bigint(50) NOT NULL auto_increment,
  'name' tinytext NOT NULL,
  PRIMARY KEY  ('id')
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=90 ;

   
 
 автор: cheops   (09.03.2006 в 21:22)   письмо автору
 
   для: FaStY   (09.03.2006 в 20:31)
 

Выдаёт такую же ошибку? Почему изменена таблица media_artists, в неё же ничего не вставляется, следует изменить media_mp3.

   
 
 автор: FaStY   (10.03.2006 в 20:13)   письмо автору
 
   для: cheops   (09.03.2006 в 21:22)
 

ну почему? как раз-таки в базу media_artists записываются имена авторов. Здесь и выкидывает ошибку

   
 
 автор: Trianon   (10.03.2006 в 20:50)   письмо автору
 
   для: FaStY   (10.03.2006 в 20:13)
 

А я бы не стал полагаться на то, что MySQL умеет работать с пятидесятизначными числами, и заменил бы BIGINT(50) на INT(9) . Сомневаюсь, что Вы наберете в ближайшее время миллиард артистов...
Между прочим... почему AUTO_INCREMENT = 90?

   
 
 автор: FaStY   (11.03.2006 в 18:59)   письмо автору
 
   для: Trianon   (10.03.2006 в 20:50)
 

просто чуть выше, мне посоветовали сделать int или bigint, но ничего не вышло :(

   
Rambler's Top100
вверх

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