0

私はこれを何時間も試してきましたが、運がありませんでした. 私がオンラインで見つけたすべてのチュートリアルは、PHP を使用して MySQL データベースに接続するためのさまざまな方法を提供しているため、一貫性を見つけるのは困難です。

次のコードを実行すると、取得しようとした値が "0" になります。どうすれば値を取得できますか? これまでのところ、次のコードがあります。

<?php 
        //Connect to MySQL server
        $conn = mysql_connect('XXIP ADDRESSXX', 'XXUSERNAMEXX', 'XXPASSWORDXX') or die(mysql_error()); //Connect to mysql

        //Continue if connection successful
        if($conn != null) {
            $db_selected = mysql_select_db('itemdata', $conn) or die(mysql_error()); //Connect to database using the connection

            //Continue if selected database successfully
            if($db_selected == true) {
                //The statement used to query the database  
                $query = "SELECT * FROM item_prices";

                //Store the results of the query
                $result = mysql_query($query, $conn) or die(mysql_error()); //Retrieve all data from the table  

                //Convert to assoc array
                $values = mysql_fetch_assoc($result);

                $cost = $values['cost'];
                $retail = $values['retail'];
                $in_stock = $values['available'];

                                    echo("<p>$cost</p>");
                                    echo("<p>$retail</p>");
                                    echo("<p>$in_stock</p>");
            }
            else 
                echo "Unable to connect to database";
        }
        else
            echo "Unable to connect to MySQL Server";

        //Close database
        mysql_close($conn);
    ?>

詳細については、デバッグを使用して、コードが最も内側の「if」ステートメントに到達することを確認したため、データベースに適切に接続して選択します。取得しようとした 3 つの変数に対して「0」を受け取るだけなので、エラーはスローされません。(変数スコープの問題ではないことを確認するために、すぐに印刷してみました)。

MySQLへの接続をコーディングしたことがなく、最適な方法を見つけるのに苦労しています(mysqli、mysql、オブジェクト指向などのチュートリアルを見つけました...そしてどれも完全ではありません(ユーザーマニュアルも)。

ありがとう。

編集:データベースの構造は次のとおりです(これまでのところ)

データベース名: itemdata

テーブル名: item_prices

テーブルには 4 つの列があります。

  • itemID (主キー) - これが検索対象です (タイプ int)
  • コスト (フロート型)
  • 小売(フロート型)
  • instock (ブール型)

itemID を使用してテーブル内のすべての値を取得しようとしています

最終編集 PHPMyAdmin からテーブルをコピーしました (これはすべてテスト目的のため、データは bs です)

itemID  cost    retail  instock
0   0   0   0
1   100 150 1
2   200 250 1
3   300 350 0
4   400 450 0
5   500 550 1
10  100 150 1
11  200 250 1
12  300 350 0
13  400 450 0
14  500 550 1
4

3 に答える 3

1

1)itemIdを検索していると言いますが、クエリに「where」条件がありません。

2)結果としてテーブルに複数の行があるため、次のようにmysql_fetch_assocを使用してすべての行を取得する必要があります。

// While a row of data exists, put that row in $row as an associative array
// Note: If you're expecting just one row, no need to use a loop
// Note: If you put extract($row); inside the following loop, you'll
//       then create $userid, $fullname, and $userstatus
while ($row = mysql_fetch_assoc($result)) {
    echo $row["userid"]; 
    echo $row["fullname"];
    echo $row["userstatus"];
}

結果が1つだけの場合は、次のように実行できます。

$row = mysql_fetch_assoc($result);
extract($row);

データベース内で取得したのと同じ名前でまだ割り当てられているすべての変数を取得します。

于 2012-08-09T22:41:45.160 に答える
1

クエリは複数の行を返す可能性が高いため、フェッチ関数をwhileループに入れる必要があります。

while ($row = mysql_fetch_assoc($result)) 
{
    echo $row["cost"];
    echo $row["retail"];
    echo $row["instock"];
}

また、テーブルの説明によると、「available」という名前の属性はありません。

于 2012-08-09T22:41:48.623 に答える
1

私はあなたのコードを少し見ましたが、これが機能するコードであることはかなり確信しています (95% のように)。それでもうまくいかない場合は、何か他のことを間違っています。

ちなみに、 を使用するときにエラー メッセージをエコーする必要はありませんdie()。スクリプトはその時点から動作を停止します。

これが私のきれいなコードです:

<?php 
//Connect to MySQL server
$conn = mysql_connect('XXIP ADDRESSXX', 'XXUSERNAMEXX', 'XXPASSWORDXX')
    or die('Unable to connect to MySQL Server');


// Select db
mysql_select_db('itemdata', $conn)
    or die('Unable to connect to database');

// Run the query and fetch the results
$query = "SELECT cost FROM item_prices WHERE itemID = 4";
$values = mysql_fetch_assoc(mysql_query($query));

// Echo everything
echo '<p>'.$values['cost'].'</p>';
echo '<p>'.$values['retail'].'</p>';
echo '<p>'.$values['available'].'</p>';

// Close the connection
mysql_close($conn);
?>
于 2012-08-09T22:50:51.170 に答える