0

Stacked に関する他の同様の質問を見て、以下に投稿する例を使用して、整数を返す必要があると言っていますが、それでも配列を取得しています...

だから..どうして配列を取得しているのですか?代わりに整数を取得するにはどうすればよいですか?

function user_exists($username){
    $result = mysql_query("SELECT COUNT(username) FROM logins");

    // Verify it worked
    if (!$result) echo mysql_error();

    $row = mysql_fetch_row($result);

    // Should show you an integer result.
    print_r($row);


    }

これにより、「配列 ( [0] => 1 )」が出力されます。コメントは、整数でなければならないと言っています。どんな助けでも大歓迎です!

上記のコードはテストのみを目的としており、実際には SELECT COUNT の値をテストし、関数で真 (または偽) のブール値を返そうとしています:

function user_exists($username){
    $query = mysql_query("SELECT COUNT (username) FROM `logins` WHERE `username`='$username'");
    return (mysql_result($query, 0)==1) ? true: false;
    }

しかし、$query 変数は配列であり、単一の値ではありません

4

1 に答える 1

8

1列の行を返します。これを使用$row[0]して、最初の列から値を取得します。

関数名mysql_fetch_rowが示すように、結果セットの各列の要素を含む配列の形式で行を返すことが期待されます。

PHPドキュメントから:

戻り値

フェッチされた行に対応する文字列の数値配列を返します。行がこれ以上ない場合はFALSEを返します。

mysql_fetch_row()は、指定された結果識別子に関連付けられた結果から1行のデータをフェッチします。行は配列として返されます。各結果列は、オフセット0から始まる配列オフセットに格納されます。

RicardoとFluffehがコメントしたように、このインターフェースは非推奨であり、PDOを使用する必要があります。PDOが登場する前は、PHPにはデータベースへの統一されたインターフェイスがなく、プロジェクトでデータベースを切り替えるのは非常に困難でした。PDOを使用すると、複数のデータベースを簡単にサポートでき、プリペアドステートメントを使用すると、SQLインジェクション攻撃に対してコードをより安全にできます。

[アップデート]

おかげで、おそらくmysql_rowは最良の方法ではなく、テスト目的でのみ使用しました。私は実際に結果を数値としてmysql_resultに挿入しようとしていますが、これは配列であるため、整数を返すことを意図していると思ったときに、SELECTCOUNTは元々配列を返すと思います。本当に$result= mysql_query( "SELECT COUNT")を単一の値にしたいです..うーん..?

本当に値を整数としてフェッチしたい場合は、代わりにこれを使用できます。

// $row = mysql_fetch_row($result);
$row = mysql_result($result, 0, 0); // first row, first column
于 2012-07-23T00:31:44.463 に答える