10

私はこのようなことをしたい:

$query=mysql_query("SELECT userid FROM users WHERE username='$username'");
$the_user_id= .....

私が欲しいのは、ユーザー名に対応するユーザー ID だけだからです。

通常の方法は次のようになります。

$query=mysql_query("SELECT * FROM users WHERE username='$username'");
while ($row = mysql_fetch_assoc($query))
    $the_user_id= $row['userid'];

しかし、これよりも効率的なものはありますか?どうもありがとう、よろしく

4

6 に答える 6

13

あなたは頭に釘を打ちました:あなたがしたいことはSELECT userid FROM users WHERE username='$username'. 試してみてください-うまくいくでしょう:)

SELECT *ほとんどの場合、悪い考えです。MySQL に返してもらいたい列の名前を指定する方がはるかに優れています。もちろん、mysql_fetch_assocデータを実際に PHP 変数に取得するには、 または同様のものを使用する必要がありますが、少なくともこれにより、使用しないこれらすべての列を MySQL に送信するオーバーヘッドが節約されます。

余談ですが、代わりに新しい mysqli ライブラリまたは PDO を使用することをお勧めします。これらは、廃止予定の古い mysql ライブラリよりもはるかに効率的です。

于 2012-05-01T20:55:09.607 に答える
4

できるだけでなく、すべきです。残念なことに、あまりにも多くの若い開発者が、あまりにも多くのデータを選択する習慣を身につけています。クエリを実行したら、返されるレコードは 1 つだけなので、while ループを実行する必要はありません。代わりに、以下を使用してください。

$sql = sprintf( "SELECT userid FROM users WHERE username = '%s'", $username );
$result = mysql_query( $sql ) or die( mysql_error() );
$data = mysql_result( $result, 0 );

if ( $data ) echo $data; // first userid returned

の 2 番目のパラメーターmysql_result()は、取得する行のインデックスです。0 が最初です。

于 2012-05-01T20:56:13.723 に答える
3

「通常の」方法は、必要な列のみを選択することです。

選択の一部であり、必要のない列があると、取得が遅くなります。一部はネットワーク トラフィックが原因で、一部は一部の列のみが選択されている場合にデータベース エンジンが特定の最適化を適用できるためです。

そしてselect *、通常、製品コードでは眉をひそめます。

于 2012-05-01T20:55:27.690 に答える
3

あなたのクエリは正しいです:

$query = mysql_query("SELECT userid FROM users WHERE username='$username'");

これは、正しく行われれば機能します。$usernameで正しくエスケープする必要があることに注意してくださいmysql_real_escape_string。SQL インジェクションの脆弱性を導入するリスクを軽減するために、パラメーター化されたクエリを検討することをお勧めします。

変更できるもう 1 つのことmysql_resultは、ループの代わりに使用することです。

$the_user_id = mysql_result($result, 0);

これは、取得できる行が 1 行だけであることを前提としています。

于 2012-05-01T20:55:42.403 に答える
1

はい、それは素晴らしい最適化の実践です!

また、さらに一歩進んで超最適化したい場合は、次のように LIMIT を追加してみてください。$query=mysql_query("SELECT userid FROM users WHERE username='$username' LIMIT 1");

もちろん、これはユーザー ID が 1 つだけ返されることを想定しており、データベース エンジンがそれを見つけると停止することを前提としています。

しかし、最も重要なこと:常に ESCAPE/SANITIZE YOUR INPUT DATA ! (これを十分に強調することはできません)

于 2012-05-01T21:12:02.150 に答える
0

1行のコードでこれを行うことができます

echo array_values(mysqli_fetch_array($mysqli->query("SELECT name FROM user WHERE id='$userid'")))[0];

これを使用する前に、以下に示すようにデータベースに接続する必要があります

 $mysqli = new mysqli('HOST', 'USERNAME', 'PASSWORD', 'DATABASE');

@samuel t thomasへのクレジット

于 2016-05-23T09:16:23.807 に答える