MySQL Query с переменной в Perl - PullRequest
1 голос
/ 04 января 2012

Мой Perl довольно ржавый, поэтому, пожалуйста, прости.Попытка написать запрос, используя переменную.Попытался переформатировать, просто не могу понять, правильно ли.Вот мой код, не уверен, что я делаю неправильно.

my $d_var = "$3\n";
my $query="SELECT id FROM `accounts` WHERE (`accounts`.`named` = ?) LIMIT 1";
my $st_h = $db_h->prepare($query);
$st_h->bind_param(1, '$d_var');
  $st_h->execute;
    my $row = $st_h->fetchrow_array();

Ответы [ 5 ]

1 голос
/ 04 января 2012

Не уверен, почему вы даже используете bind_param.На мой взгляд, гораздо проще просто передать дополнительные значения в execute.

my $d_var = "$3\n";
my $query = 'SELECT id FROM accounts` WHERE (`accounts`.`named` = ?) LIMIT 1';
my $st_h = $db_h->prepare($query);
$st_h->execute($d_var);
my $row = $st_h->fetchrow_array();

Рассматривали ли вы переход на DBIx :: Class ?

1 голос
/ 04 января 2012

Пожалуйста, проверьте еще раз:

  1. $ 3 содержит что-то разумное
  2. , объединяющее значение $ 3, и "\ n" (путем интерполяции) является правильным ("\ n" в поле?)
  3. как 'не интерполируется => my $st_ht->bind_param(1, $d_var);

(я не понимаю документы DBI, как это делает Крис Ледет.)

2-йдумал:

Этот фрагмент кода:

  my $v = "nix nix 1001";
  print "$v\n";
  print '$v\n', "\n";
  if ($v =~ m/(nix) (nix) (\d+)/) {
    print 'found: ', $3, "\n";
    $sth = $dbh->prepare('SELECT * FROM sample01.csv WHERE GRUPPE=?');
    $sth->bind_param(1, $3);
    $sth->execute;
    while(my @row = $sth->fetchrow_array()) {
      print '|', join( '|', @row ), "|\n";
    }
  } else {
    print "no match\n";
  }

и вывод:

DBI: 1.616 DBD::CSV: 0.33
|00000089-6d83-486d-9ddf-30bbbf722583|2011-09-17 16:25:09|1001|
|000004c9-92c6-4764-b320-b1403276321e|2011-11-09 13:52:30|2000|


nix nix 1001
$v\n
found: 1001
|00000089-6d83-486d-9ddf-30bbbf722583|2011-09-17 16:25:09|1001|

должен иллюстрировать:

  1. 'не интерполируется, ваш '$ d_var' передаст это имя переменной буквально в DBI
  2. для правильного соответствия не нужно "\ n", чтобы "работать"
  3. последовательность параметров для bind_param это число, значение
0 голосов
/ 04 января 2012

Помимо того, что сказал Дэн (удаляя одинарную кавычку), вы связали свой параметр с возможно ни одним объектом дескриптора Statement $st_ht->bind_param(...) это должно быть $st_h->bind_param(...).

0 голосов
/ 04 января 2012

У меня есть печать $ 3 до выполнения, и в строке есть данные.

У меня есть d_var = "$ 3 \ n", так как переменная $ 3 генерируется строкой Regex и непохоже, что работает без \ n.

Попробовал то, что предложил Крис выше, однако не сработало.

0 голосов
/ 04 января 2012

Что это значит?

my $st_ht->bind_param(1, '$d_var');

Переменная не вводится, так почему my?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...