powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Perl и MySQL, параметрический запрос
6 сообщений из 6, страница 1 из 1
Perl и MySQL, параметрический запрос
    #38552967
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такой запрос:
Код: sql
1.
2.
3.
insert into `tbl_group` (`BILLCODE`, `CODE`, `NOTINBILLING`, `GROUPNAME`, `ABON`, `ABONDAY`, `SPEEDTX`, `SPEEDRX`)
values (:BILLCODE, :CODE, 0, :GROUPNAME, :ABON, :ABONDAY, :SPEEDTX, :SPEEDRX)
on duplicate key update `NOTINBILLING` = 0, `GROUPNAME` = :GROUPNAME, `ABON` = :ABON, `ABONDAY` = :ABONDAY, `SPEEDTX` = :SPEEDTX, `SPEEDRX` = :SPEEDRX


Есть такой код, который этот запрос обрабатывает:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
  # $sql = "insert into `tbl_group` ...
  # $params = {'BILLCODE'=>1, 'CODE'=>'bm-1', 'GROUPNAME'='title1', ...}
  my $q = $dbh->prepare($sql);
  if ($params)
  {
    if (ref($params) eq 'HASH')
    {
      $q->bind_param(":$_", $params->{$_}) foreach keys(%$params);
    }
    elsif (ref($params) eq 'ARRAY')
    {
      $q->bind_param($_+1, $params->[$_]) foreach (0..$#$params);
    }
    else
    {
      $q->bind_param(1, $params);
    }
  }
  my $rs = $q->execute();



В Oracle такой код нормально работает.
С MySQL он выдает для каждого параметра ошибку на строке bind_param:
Код: plaintext
1.
2.
Argument ":BILLCODE" isn't numeric in subroutine entry at ...
Argument ":CODE" isn't numeric in subroutine entry at ...

Не подскажите, что не так?
Если MySQL не поддерживает именованные параметры и нужно использовать позиционные, то для выражения on duplicate key их нужно будет повторять?

________________________
Мы смотрим с оптимизмом...
...в оптический прицел.
...
Рейтинг: 0 / 0
Perl и MySQL, параметрический запрос
    #38553602
Фотография Black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: php
1.
2.
3.
4.
CREATE TABLE IF NOT EXISTS `test` (
  `1` int(11) NOT NULL,
  `2` int(11) NOT NULL
);



Код: php
1.
2.
3.
4.
5.
6.
7.
...
my $sql = "insert into test values (?, ?)";
my $sth = $dbh->prepare($sql);
$sth->bind_param(1, 111);
$sth->bind_param(2, 222);
$sth->execute();
...
...
Рейтинг: 0 / 0
Perl и MySQL, параметрический запрос
    #38553627
Фотография Black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дело в том, если не ошибаюсь , dbd::mysql не поддерживает именные placeholder в отличие от dbd::oracle.
...
Рейтинг: 0 / 0
Perl и MySQL, параметрический запрос
    #38553683
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понятно.
Это неудобно, часть параметров придется дублировать.
Да и если вдруг в подсчете порядкового номера параметра ошибусь, будет грустно.
...
Рейтинг: 0 / 0
Perl и MySQL, параметрический запрос
    #38553692
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Perl и MySQL, параметрический запрос
    #38553697
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О, спасибо, не знал про такое.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Perl и MySQL, параметрический запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]