Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ODBC+mySQL, Изучаю модуль ODNC 
:(
    Опции темы
strength2008
Дата 18.1.2012, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 18.1.2012

Репутация: нет
Всего: нет



Здравствуйте.
Возник следующий вопрос.
Пытаюсь выполнить простой инсерт в таблицу на mySQL сервере, однако код выдает ошибки (цикл работает): 
DBD::mysql:smileb do failed: Unknown column 'forth_word' in 'field list' at d:\Prog
ramming\Perl\DBI.pl line 72.

Код:
Код

$mass=[forth_word, fifth_word, sixth_word];
for (@$mass)
{
# $id++;
my $desc=my $w=$_;
$desc=~s /(.+)/this_is_\1/;
$dbh->sql("Insert into NewT(word,description) Values ($word,$desc);") 
and warn "Can't".$dbh->Error." \n"
}


Собсно, непонятно, кто виноват - драйвер mysql или же perl-овая библиотека, в этой ошибке - ибо, синтаксис с точки зрения mysql вполне верный, и почему значения для инсерта выдаются за названия вставляемых полей. непонятно.
Уже долго мучаю эту тему. но что-то не движется с места, может, я не верный синаксис perl-а использую?
Спасибо.
PM MAIL   Вверх
Pfailed
Дата 18.1.2012, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 22
Всего: 39



Вы кавычки не забыли? Что в запросе, что в определении массива.


--------------------
PM MAIL   Вверх
strength2008
Дата 19.1.2012, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 18.1.2012

Репутация: нет
Всего: нет



Pfailed, в определении массива точно нет, там же ссылка на анонимный массив идет:

Код

$mass=[forth_word, fifth_word, sixth_word];


а в запросе где я мог кавычки забыть?

Код


for (@$mass)
{
# $id++;
my $desc=my $w=$_;
$desc=~s /(.+)/this_is_\1/;
$dbh->sql("Insert into NewT(word,description) Values ($word,$desc);") 
and warn "Can't".$dbh->Error." \n"
}

PM MAIL   Вверх
Absinthe
Дата 19.1.2012, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 4.5.2011

Репутация: нет
Всего: 11



Цитата

$word,$desc
 Тут. Экранирование строк где?
PM MAIL   Вверх
strength2008
Дата 19.1.2012, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 18.1.2012

Репутация: нет
Всего: нет



Absinthe, т.е. надо написать:

Код

$dbh->sql("Insert into NewT(word,description) Values ("$word","$desc");");


так?

Добавлено @ 08:47
Вернее, вот так написал:

Код

$dbh->sql("Insert into NewT(word,description) Values (".$w.",".$desc.");") 


но результат тот же.

Это сообщение отредактировал(а) strength2008 - 19.1.2012, 08:48
PM MAIL   Вверх
Absinthe
Дата 19.1.2012, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 4.5.2011

Репутация: нет
Всего: 11



strength2008, отладка. Распечатай запрос и посмотри на него.
PM MAIL   Вверх
arto
Дата 19.1.2012, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



Unknown column 'forth_word' in 'field list' наводит на мысль о грамматической ошибке.
вы уверены, что колонка именно так называется?
PM MAIL ICQ   Вверх
strength2008
Дата 19.1.2012, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 18.1.2012

Репутация: нет
Всего: нет



Absinthe, смотрел, нормально по идее все получается:

Код

print $dbh->sql("Insert into NewT(word,description) Values ($word,$desc);")


дает, как и ожидалось, 

Insert into NewT(word,description) Values (forth_word,forth_word_desc)

и.т.п. т.е. вроде нормальный SQL-код. Но ошибка остается при этом.


arto, нет, колонка именно что так не называется. Но почему-то вставляемое значение интерпретируется как поле для вставки, о чем и пишет мне ошибку:
DBD::mysql:smileb do failed: Unknown column 'forth_word' in 'field list' at d:\Prog

Это сообщение отредактировал(а) strength2008 - 19.1.2012, 18:18
PM MAIL   Вверх
Pfailed
Дата 19.1.2012, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 22
Всего: 39



>Insert into NewT(word,description) Values (forth_word,forth_word_desc)
Должно быть Insert into NewT(`word`,`description`) Values ('forth_word','forth_word_desc')


--------------------
PM MAIL   Вверх
strength2008
Дата 19.1.2012, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 18.1.2012

Репутация: нет
Всего: нет



Pfailed

написал так:
Код

$dbh->sql("Insert into NewT('word','description') Values ('$w','$desc');") 


Но, теперь просто выдает синтаксическую ошибку и все. Я уже в 3 книжках посмотрел код, который был первоначально у меня - у авторов вроде бы все работает, у меня нет(
Смотрел у Ларри Уолла в книжке и в "perl и системное администрирование".

Это сообщение отредактировал(а) strength2008 - 19.1.2012, 18:55
PM MAIL   Вверх
Absinthe
Дата 19.1.2012, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 4.5.2011

Репутация: нет
Всего: 11



strength2008, твоя ошибка в том, что использование MySQL из Perl предполагает знание MySQL, а не только Perl. Сначала поработай с MySQL в консоли(советую dbForge) и только потом используй ее в ЯП.

Ты путаешь строковое значение и столбец.
PM MAIL   Вверх
Pfailed
Дата 19.1.2012, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 22
Всего: 39



Цитата(strength2008 @  19.1.2012,  18:52 Найти цитируемый пост)
написал так:

Разницу между ' и ` видим?


--------------------
PM MAIL   Вверх
tzirechnoy
Дата 19.1.2012, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: нет
Всего: 16



Документацыя по модулям perl добывается при помощи команды perldoc. Например, perldoc DBI -- документацыя по DBI, perldoc DBD::mysql -- документацыя по возможностям драйвера mysql в DBI.

Ваш код в примере -- это какой-то ужас. Начиная с того, что он не запустится, поскольку нет use DBD и вообще всего соединения с базой. Постить такие отрывки вполне нормально -- если Вы и уверены в том, что правильно написали остальную обвязку, и уверены, что и окружающие её с лёгкостью напишут. Когда Вы только начали изучать этот раздел подобная самоуверенность несколько несвоевременна. 
Кроме того, он ни при каких обстоятельствах не можэт выдать того, что Вы написали. То есть Вы ещё и что-то не то скопировали.

Впрочем, ключевую вещь, которую в обязательном порядке следует понять перед тем, как писать на DBI -- раздел "Placeholders and Bind Values" из его документацыи. Замечу, что ими совершэнно необязательно пользоваться -- но их надо понимать.
PM MAIL   Вверх
strength2008
Дата 20.1.2012, 07:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 18.1.2012

Репутация: нет
Всего: нет



Absinthe
Pfailed
окончательно разобрался. большое вам спасибо. 
Да, я действительно подзабыл, что в MySql `и ' это разные символы, и несут разную семантическую нагрузку.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0650 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.