0

私は一日中答えを探し、自分の考えもすべて試しました。私がやっていることは一見簡単そうに見えますが、私にとってはとても難しいことです。追加の Perl モジュールをインストールせずにこれを行う必要があります。

2 つの日付の間に入力された名前のリストを選択しようとしています。これらの例は明らかに厳密でも安全でもないことはわかっていますが、理解しようとしているだけです。必要な結果を得る手段を見つけたら、後ですべてを修正します。

$to および $from の受信データの例:

$to= '2013-03-01 00:00:01';
$from= '2013-03-01 23:23:59';

データベースのentered列もその形式です。

私は試した:

$names = DBI->connect("$sdb","$user","$password");
   $getnames = $names->prepare(qq{SELECT DISTINCT `name` 
    FROM `users` 
    WHERE `entered` 
    BETWEEN UNIX_TIMESTAMP($from) 
    AND UNIX_TIMESTAMP($to) 
    AND `active` = ? 
    AND `confirmed` = ? 
    ORDER BY `entered` DESC});
    $getnames->execute($active,$confirmed);

そして私は試しました:

    $names = DBI->connect("$sdb","$user","$password");
    $getnames = $names->prepare(qq{SELECT DISTINCT `name`
   FROM `users`
   WHERE `entered` BETWEEN ?
   AND ?
   AND `active` = ?
   AND `confirmed` = ?
   ORDER BY `entered` DESC});
   $getnames->execute($from,$to,$active,$confirmed);

上記の2つの多くのバリエーションも試しましたが、取得し続けます:

Can't call method "prepare" on an undefined value at users-by-date.pl line 120 even when I hard code the variables.

誰かがこれを行う方法を教えてもらえますか? 私のクエリは phpmyadmin で正常に実行されますが、Perl を使用して結果をページに出力する必要があります。日付形式に関係があると思います。いいえ、データベースの日付形式を変更できません。

本当にありがとう。

4

1 に答える 1

2
$names = DBI->connect("$sdb","$user","$password");

する必要があります

$names = DBI->connect($sdb, $user, $password) or die "Couldn't connect to database: $!";

パーツを追加すると、次のor die...2 つの目的に役立ちます。

1) プログラムをすぐに停止し、後でデータベース ハンドルを使用しようとしたときに誤ったエラーが発生するのを防ぎます。実際の問題は、データベースへの接続に失敗したことです。

2)データベース接続が失敗した理由が表示されます。(データベースのエラー メッセージは にあります$!。)

また、変数を囲む二重引用符は不要なので削除しました。

于 2013-03-08T09:34:33.280 に答える