![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
klem4 |
![]()
Сообщение
#1
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Всем привет.
Вот такой код отрабатывает нормально: Код use Mysql; // ... $dbh = Mysql -> connect ( $host, $database, $user, $password ) || die "\nCan't connect to MYSQL\nReason: $DBI::errstr\n"; // ... $query = $dbh -> Query ( "$script" ) || die "\nCan't excute statement '$script'\nReason: $DBD::errstr\n"; А вот такой, выдает ошибку (на execute) "No database selected" Код use DBI; // <-------- //... $dbh = DBI -> connect ( "DBI:mysql:database = $database; $host = $host", $user, $password ) || die "\nCan't connect to MYSQL\nReason: $DBI::errstr\n"; //... $query = $dbh -> prepare ( "$script" ) || die "\nCan't prepare statement '$script'\nReason: DBI::errstr\n"; print "\n -- Prepare is ok.\n"; $query -> execute || die "\nCan't execute statement '$script'\nReason: $DBI::errstr\n"; print "\n Executing is ok.\n"; Почему ? Я понимаю что вроде как не выбрана база, но при use Mysql, можно использовать SelectDB, но работает и без этого, а при use DBI что нужно сделать чтобы выбрать базу ? Я думал что в строке connect'a это прописывается, видимо нет. Добавлено через 16 мин. Проблема решена. Убрал пробелы из этой строчки: Код "DBI:mysql:database=$database;host=$host" Сообщение отредактировано: klem4 - 17.06.2008 18:30 -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
klem4 |
![]()
Сообщение
#2
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Возникла другая проблема, есть скрипт файл, содержащий несколько SQL-запросов, например вот такой:
Цитата(create.sql) CREATE TABLE PRODUCTS ( PRODUCT_ID int NOT NULL, PRODUCT_NAME varchar(40) NOT NULL, PRIMARY KEY (PRODUCT_ID) ); CREATE UNIQUE INDEX idx_product_name ON PRODUCTS ( PRODUCT_NAME ); Я считываю его в переменную Код $/ = undef; $script = <script_file>; И хочу выполнить: Код $query = $dbh -> prepare ( "$script" ) || die "\nCan't prepare statement '$script'\nReason: $DBI::errstr\n"; print "\n -- Prepare is ok.\n"; $query -> execute || die "\nCan't execute statement \nReason: $DBI::errstr\n"; вываливается с криками об ошибке в синтаксисе SQL-запроса, начиная с 'CREATE UNIQUE INDEX ...' В файла 2 запроса, по одиночке выполняются отлично, но вместе подрят никак ... чувствую дело в диалексте или еще в чем, пробовал убирать ';' не помогло, ничего в голову не приходит пока. Сообщение отредактировано: klem4 - 17.06.2008 18:59 -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
klem4 |
![]()
Сообщение
#3
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
В общем решил проблему вот так:
Код @scripts = split(/;/, $script); $statement = 0; foreach (@scripts) { print "\n[",++$statement, " statement starting]\n"; $query = $dbh -> prepare ( "$_" ) || die "\nCan't prepare statement '$script'\nReason: DBI::errstr\n"; print "\n -- Prepare is ok.\n"; $query -> execute || die "\nCan't execute statement \nReason: $DBI::errstr\n"; print "\n --Executing is ok.\n"; } -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
klem4 |
![]()
Сообщение
#4
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Продолжение эпопеи ... вот тут уже совсем незнаю что делать, вот пример: 2 простейшие таблицы, связь 1 ко многим по table1_id
Код CREATE TABLE TABLE_1 ( TABLE1_ID int unsigned unique NOT NULL auto_increment, TABLE1_DATA varchar(20) NULL, PRIMARY KEY (TABLE1_ID) ) type=innodb; create unique index idx on table_1( TABLE1_ID ); CREATE TABLE TABLE_2 ( TABLE2_ID int NOT NULL, TABLE1_ID int unsigned NOT NULL, TABLE2_DATA varchar(20) NULL, PRIMARY KEY (TABLE2_ID), FOREIGN KEY (TABLE1_ID) REFERENCES TABLE_1 ) type=innodb; пишет, что "Can't create table_2.frm (errno: 150)" все перепробовал, добавил unsigned, обеим проставил type=innodb, добавил индекс по ключу первой таблицы ... ![]() -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
klem4 |
![]()
Сообщение
#5
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
![]() Код CREATE TABLE TABLE_1 ( TABLE1_ID int not null auto_increment, TABLE1_DATA varchar(20) NULL, PRIMARY KEY (TABLE1_ID) ) engine=innodb; CREATE TABLE TABLE_2 ( TABLE2_ID int NOT NULL auto_increment, TABLE2_DATA varchar(20) NULL, TABLE1_ID int not null, index idx(TABLE1_ID), PRIMARY KEY (TABLE2_ID), FOREIGN KEY (TABLE1_ID) REFERENCES TABLE_1(TABLE1_ID) on delete restrict ) engine=innodb; -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
![]() ![]() |
![]() |
Текстовая версия | 20.06.2025 13:24 |