SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 22.11.2010 05:31:00

NewUse
Участник
Зарегистрирован: 22.11.2010
Сообщений: 9

ERROR 1064 (42000) Я Полный чайник

Прошу прощения у уважаемых пользователей, но я полный чайник, и почитав статьи по основам, не понимаю причины происхождения данной ошибки:

DROP DATABASE myfirstdb IF EXISTS;

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF EXISTS' at line 1

Стоит MySQL 5.1
Импортирую схему именно для MySQL, правда, для какой версии -- точно не знаю sad

Подскажите, где ошибка в синтаксисе, и как он должен выглядеть, либо киньте ссылку, на поддерживаемые функции данной версии и их описание, пожалуйста smile

Спасибо.


Комментарий модератора.
В статье ERROR 1064 (42000) объясняется, что означает ошибка сервера MySQL №1064, рассматриваются типичные ситуации и причины возникновения этой ошибки, а также даются рекомендации по исправлению.

Отредактированно NewUse (22.11.2010 05:31:34)

Неактивен

 

#2 22.11.2010 06:42:48

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: ERROR 1064 (42000) Я Полный чайник

IF EXISTS должно идти перед именем базы данных
http://dev.mysql.com/doc/refman/5.5/en/ … abase.html

Неактивен

 

#3 23.11.2010 01:50:30

NewUse
Участник
Зарегистрирован: 22.11.2010
Сообщений: 9

Re: ERROR 1064 (42000) Я Полный чайник

Да, спасибо, заработало, помогите, пожалуйста исправить ещё одну ошибочку такого же типа (несовместимость версий):
Сайтик под  предположительно php4+MySQL -- версия ранняя 2004г или ранее:

while ($row = $query->fetchRow()) {
    unset($ROW);
    $row[packet] = "<A HREF=packet.php?gid=$row[gid]>$row[packet]\n";
    $TMP_ROW = "<A HREF=edit_packet.php?gid=$row[gid]><img src=images/edit.gif alt=\"".$INDEX_PAGE[edit]."\" border=0></A>\n";
    if ($row[action] > 0){
            $TMP_ROW.=" | <A HREF=edit_price.php?gid=$row[gid]><img src=images/price.gif alt=\"".$INDEX_PAGE[price]."\" border=0></A>\n";
    }
    $TMP_ROW.=" | <A HREF=del_packet.php?gid=$row[gid]><img src=images/delete.gif alt=\"".$NIBS_TEXT[delete]."\" border=0></A>\n";
    $row[action] = $TMP_ROW;
    $count = $db->getRow("select count($username) as $username from users where gid=$row[gid]");
    $row[num_users] = $count[$username];
    $TOTAL_USER += $count[$username];
    $TRAF_ARRAY = $db->GetRow("select sum(in_bytes) as in_bytes, sum(out_bytes) as out_bytes from ".NIBS_ACCT_TABLE." where gid=".$row[gid]);
    $row[gid] = round($TRAF_ARRAY[in_bytes]/(1024*1024),$ROUND_DIGIT)."/";
    $row[gid].= round($TRAF_ARRAY[out_bytes]/(1024*1024),$ROUND_DIGIT);
    $TOTAL_IN  += $TRAF_ARRAY[in_bytes];
    $TOTAL_OUT += $TRAF_ARRAY[out_bytes];
    while(list($key,$val)=each($row)){
        if ($HEADER){
            $TMP_HEADER[] = array(VARS   => $NIBS_TEXT[$key],
                                  TD_CLR => HDR_CLR,
                                  TH     => true);
        }
        $ROW[] = array(VARS   => $val,
                       TD_PAR => "align=middle",
                       TD_CLR => DEF_CLR);
    }
    if($HEADER){
        $HEADER  = false;
        $ARRAY[] = $TMP_HEADER;
    }
    $ARRAY[]=$ROW;

}


в логах ошибка:

PHP Fatal error:  Call to a member function fetchRow() on a non-object in /usr/local/www/data/index.php on line 13

Неактивен

 

#4 23.11.2010 01:59:31

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: ERROR 1064 (42000) Я Полный чайник

Как следует из текста ошибки — Вы пытаетесь вызвать метод у сущности,
не являющейся объектом. Задавайте, пожалуйста, вопросы по PHP на
webew.ru.

Неактивен

 

#5 23.11.2010 15:28:00

NewUse
Участник
Зарегистрирован: 22.11.2010
Сообщений: 9

Re: ERROR 1064 (42000) Я Полный чайник

Спасибо, а такой синтаксис в MySQL5 допустим?

SELECT packet, num as num_users,gid,tos as action FROM packets order by num

Неактивен

 

#6 23.11.2010 16:17:12

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: ERROR 1064 (42000) Я Полный чайник

Да.

Неактивен

 

#7 24.11.2010 17:01:53

NewUse
Участник
Зарегистрирован: 22.11.2010
Сообщений: 9

Re: ERROR 1064 (42000) Я Полный чайник

Не подскажите, ещё один тупой вопрос от полного чайника?:
почему (и в каких случаях) в MySQL 5 на запрос:

SELECT packet, num as num_users,gid,tos as action FROM packets order by num
 

Может вернуться ошибка, или тип, не соответствующий стандартному?
В результате к ответу при попытки применить функцию:
   function FetchRow()
    {
        if ($this->EOF) {
            $false = false;
            return $false;
        }
        $arr = $this->fields;
        $this->_currentRow++;
        if (!$this->_fetch()) $this->EOF = true;
        return $arr;
    }
   

Вываливается ошибка
PHP Fatal error:  Call to a member function fetchRow() on a non-object in /usr/local/www/data/index.php on line 13
 

Я правда чайник, но с помощью выше рекомендованного сайта определил, что ошибка именно в результате запроса MySQL.

Неактивен

 

#8 24.11.2010 17:37:09

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: ERROR 1064 (42000) Я Полный чайник

Не-а, ошибка в сценарии PHP, который не проверяет, что вернулся объект,
а просто дергает его метод. Ищите название объекта на 13 строке, а потом
смотрите, где он определяется. Ошибка где-то там.

Неактивен

 

#9 24.11.2010 17:56:57

NewUse
Участник
Зарегистрирован: 22.11.2010
Сообщений: 9

Re: ERROR 1064 (42000) Я Полный чайник

так ошибка то и возникает из-за невернго формата возврата запроса  из БД:

Ошибка возникает в:

query($sql)

где
$sql="SELECT packet, num as num_users,gid,tos as action FROM packets order by num"

при попытки применить к нему функцию FetchRow (описание выше) в php это выглядит так:
$query->fetchRow()


Вот от сюда и вопрос, в каких случаях БД может выдавать разный ответ (вернее разный формат ответа),  сейчас проверил вручную:
вот ответ:

ERROR 1054 (42S22): Unknown column 'num' in 'field list'

Отредактированно NewUse (24.11.2010 18:13:33)

Неактивен

 

#10 24.11.2010 18:17:37

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: ERROR 1064 (42000) Я Полный чайник

Ура. Нет такого столбца. Наконец-то Вы добрались до проблемы smile

ALTER TABLE packets ADD num INT;

Неактивен

 

#11 24.11.2010 18:41:19

NewUse
Участник
Зарегистрирован: 22.11.2010
Сообщений: 9

Re: ERROR 1064 (42000) Я Полный чайник

Угу, походу схема БД была не верной, ща переправлю и инструкташку под фриНИБС с Веб-мордой накатаю, там уже пришлось кое-что поменять smile


СПАСИБО!!!!!

Подскажите, пожалуйста, как подредактировать схему, чтоб этой ошибки не возникало:


DROP TABLE IF EXISTS packets;
CREATE TABLE `packets` (
  `gid` bigint(15) unsigned NOT NULL auto_increment,
  `packet` varchar(128) NOT NULL default '',    
  `deposit` double(16,6) NOT NULL default '0.000000',
  `credit` double(16,6) NOT NULL default '0.000000',
  `tos` tinyint(1) unsigned NOT NULL default '0',
  `do_with_tos` tinyint(1) unsigned NOT NULL default '1',
  `direction` tinyint(1) unsigned NOT NULL default '0',    
  `fixed` tinyint(1) unsigned NOT NULL default '0',    
  `fixed_cost` double(16,6) NOT NULL default '0.000000',
  `activated` tinyint(1) unsigned NOT NULL default '1',    
  `activation_time` int(10) NOT NULL default '2678400',    
  `blocked` tinyint(1) unsigned NOT NULL default '0',    
  `total_time_limit` bigint(15) unsigned NOT NULL default '0',
  `month_time_limit` bigint(15) unsigned NOT NULL default '0',
  `week_time_limit` bigint(15) unsigned NOT NULL default '0',
  `day_time_limit` bigint(15) unsigned NOT NULL default '0',
  `total_traffic_limit` bigint(15) unsigned NOT NULL default '0',
  `month_traffic_limit` bigint(15) unsigned NOT NULL default '0',
  `week_traffic_limit` bigint(15) unsigned NOT NULL default '0',
  `day_traffic_limit` bigint(15) unsigned NOT NULL default '0',    
  `total_money_limit` double(16,6) NOT NULL default '0.000000',    
  `month_money_limit` double(16,6) NOT NULL default '0.000000',    
  `week_money_limit` double(16,6) NOT NULL default '0.000000',    
  `day_money_limit` double(16,6) NOT NULL default '0.000000',    
  `login_time` varchar(254) NOT NULL default '',        
  `huntgroup_name` varchar(64) NOT NULL default '',        
  `simultaneous_use` smallint(3) unsigned NOT NULL default '0',    
  `port_limit` smallint(3) unsigned NOT NULL default '0',    
  `session_timeout` bigint(15) unsigned NOT NULL default '0',    
  `idle_timeout` bigint(15) unsigned NOT NULL default '0',    
  `framed_ip` varchar(16) NOT NULL default '',            
  `framed_mask` varchar(15) NOT NULL default '',        
  `no_pass` tinyint(1) unsigned NOT NULL default '0',        
  `no_acct` tinyint(1) unsigned NOT NULL default '0',        
  `allow_callback` tinyint(1) unsigned NOT NULL default '0',    
  `other_params` MEDIUMTEXT,
  `allowed_servers` varchar(254) NULL,                
  `up` int(5) NULL,                
  `down` int(5) NULL,
  `ippool_name` varchar(64) NULL,
  `provider_id` bigint not null default '0',
  PRIMARY KEY  (`gid`),
  UNIQUE KEY `packet` (`packet`)
);
 

Отредактированно NewUse (24.11.2010 19:54:12)

Неактивен

 

#12 24.11.2010 20:29:10

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: ERROR 1064 (42000) Я Полный чайник

У меня ощущение, что на этот вопрос я уже ответил в предыдущем сообщении sad

Неактивен

 

#13 24.11.2010 22:07:31

NewUse
Участник
Зарегистрирован: 22.11.2010
Сообщений: 9

Re: ERROR 1064 (42000) Я Полный чайник

Да, я же писал, что чайник, но судя по аналогии должно быть что-то типа:

`num` int
 

?

Не подскажите, кто такое может сообщать

Ошибка изменения пареметров - (uid is empty)

может ли это быть MySQL

Неактивен

 

#14 24.11.2010 22:17:24

NewUse
Участник
Зарегистрирован: 22.11.2010
Сообщений: 9

Re: ERROR 1064 (42000) Я Полный чайник

а, вот, всё обнаружил запрос:

INSERT INTO users (user,password, gid,deposit,credit,add_date,blocked,activated,crypt_method) values ('','', , , , '0000-00-00', '', '','')

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' , , '0000-00-00', '', '','')' at line 1

В чём здесь ошибка? Подскажите, пожалуйста?

Неактивен

 

#15 25.11.2010 11:08:10

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: ERROR 1064 (42000) Я Полный чайник

Вы бы привели создание таблицы users ;-), а то трудно анализировать запрос вставки, не зная структуры таблицы. Посмотреть структуру можно запросом "show create table users;".

Ошибка как минимум в том, что Вы указали поля, в которые хотите вставить данные (gid,deposit,credit), но не вставляете туда данных, это недопустимо. Если запрос будет иметь вид

INSERT INTO users (user,password,add_date,blocked,activated,crypt_method) values ('','','0000-00-00','','','')

то у него больше шансов на успех, I guarantee it.

Отредактированно deadka (25.11.2010 11:09:57)


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#16 25.11.2010 15:49:58

NewUse
Участник
Зарегистрирован: 22.11.2010
Сообщений: 9

Re: ERROR 1064 (42000) Я Полный чайник

Да, спасибо, дело было в скелете, взял скелет от болеее старой версии и добавил нужные поля, теперь всё ОК smile

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson