0

私はSecondLifeの小さなシステムに取り組んでおり、データベースを多用する必要がありますが、一生解決できない問題に遭遇しました。

2つの異なる列の値に基づいて行全体を選択するクエリを実行しようとしています。$ _GET ['']呼び出しを使用して、必要な詳細を識別します。次に、行全体からすべてのデータをプルして、空白のページにエコーする必要があります。

これで、最初は機能するようになりましたが、特定の行だけが必要な場合は、UUIDによって作成されたすべての行をプルしてエコーしていました。次に、2番目の識別子(テストの目的で「フィールド」と呼ばれる列)を使用して動作させようとしましたが、それがほとんど失われました。

2つの正確な値を持つ1つの行を選択する必要があります。また、2つのうちの一方だけではなく、両方を持つ行のみを選択するように、厳密である必要があります。

何か案は?

スクリプトが同封されています(参照用に保持していた混乱やコメントアウトされたコードは気にしないでください。スクリプトが機能するようになったら、スクリプトをクリーンアップします!)

     <?php

// Get key from the parameter.
$avatar_key = $_GET['key'];

// Quest params.
$questname = $_GET['questname'];
$questid = $_GET['id'];


// Connect to the database. $con holds connection info.

$con = mysql_connect("localhost","user","pass");

// Error checking.
if(!$con)
{
    die('Could not connect: '.mysql_error());
}


// Select the DB we want.
mysql_select_db("yyyyy_slcom",$con);

// Build the query.
$query = "SELECT * FROM sldb_data WHERE sldb_data.uuid = '$avatar_key' AND sldb_data.field = '$questname'";
/*$query = "select * from (
                            select uuid, field, value, progress, ROW_NUMBER() OVER (PARTITION BY uuid ORDER BY progress DESC)
            ";*/

// Run the query, store the result in variable $result.
$result = mysql_query($query);

if(!result)
{
die('Error: ' . mysql_error());
}

// Check how many rows we got back with our query.
$rows_returned = mysql_num_rows($result);

echo $row['field'];

// If we get anything back,
if($rows_returned > 0)
{




    //echo $row['field'] . ' was found.' . $questname;
    /*if(!$row['field'])
    {
        echo 'You are not on this quest yet.';
    }
    elseif(($row['field']) && ($row['value'] == "notstarted"))
    {
        echo 'This quest hasn\'t started yet.';
    }
    elseif(($row['field']) && ($row['value'] == "started"))
    {
        echo 'You are on quest: "' .$row['field']. '"';
    }*/

    /* $fields = mysql_list_fields("tenaar_slcom","sldb_data");
    $columns = mysql_num_fields($fields);
    for ($i = 0; $i < $columns; $i++) {$field_array[] = mysql_field_name($fields, $i);}

    if(in_array($quest, $field_array))
    {
        echo 'Your quest is ' . $row['field'];
    }
    elseif(!in_array($questname, $field_array))
    {
        echo 'You are not on this quest yet.';
    }
    elseif((in_array($questname, $field_array)) && ($row['value'] == "notstarted"))
    {
        echo 'You have not started quest "' .$row['field']. '" yet.';
    } */    

    // cycle through and print what we got.
    //while($row = mysql_fetch_array($result))
    //{

        //echo 'Quest name: ' . $row['field'] . ' | Progress: ' .$row['value'] . '<br />';

    //}
}
/*else
{
echo 'You are not on this quest yet.';
}*/

// Close the connection.
mysql_close($con);

?>
4

1 に答える 1

2

行数を取得してからフィールドを印刷するまでの間に、1つのステップが欠落しているように見えます。クエリの結果を実際に$row配列に格納する必要があります。

$rows_returned = mysql_num_rows($result);
$row = mysql_fetch_array($result);
echo $row['field'];
于 2012-12-05T18:39:40.203 に答える