1

DBI-> executeステートメントが空のセットを返すかどうかを確認する方法はありますか?目的は、テーブルを作成し、ユーザー名を要求します。ユーザー名がテーブルにない場合は(空のfetch()ステートメントを確認します)、テーブルに追加します。助言がありますか?

    $sth = $dbh->prepare("SELECT * FROM table_name_here");
    $sth->execute();

    if(...$sth->fetch() was empty...)
    do something...
4

4 に答える 4

2

それを試してください:

$sth = $dbh->prepare("SELECT * FROM table_name_here");
$sth->execute();

unless ($sth->fetch()) { do something..; }
于 2012-10-12T13:38:53.497 に答える
2

DBI->executeステートメントが空のセットを返すかどうかを確認する方法はありますか

はい。

$sth = $dbh->prepare("SELECT * FROM table_name_here");
$sth->execute();
unless( $sth->rows ) {
    #empty set
}
于 2012-10-12T14:30:49.097 に答える
2

このように、レコード数の予備フェッチを行うことをお勧めします

my ($records) = $dbh->selectrow_array('SELECT count(*) FROM table_name_here');
于 2012-10-12T15:37:16.880 に答える
1

それを行うための1つの可能なアプローチ:

my $row_count = 0;
while (my @ary = $sth->fetchrow_array() ) { ...; $row_count++; }
unless ($row_count) { 
  ...
}

しかし、この特定のケースでfetchrowは、なぜ使用する必要があるのか​​、使用する必要がないのか疑問に思わずにはいられません。fetchall実際、私はそれを次のように再編成します。

my ($count) = $dbh->selectrow_array('
   SELECT COUNT(*) FROM users WHERE username = ?'
   undef, $username);
if ($count) { ... } 
于 2012-10-12T13:41:26.007 に答える