0
$pullItem = mysql_query("SELECT * FROM items WHERE item_id = '$itemid'");
while ($fetch = mysql_fetch_array($pullItem)) {
    $statinc = $fetch['statinc'];
}

$pullUserStats = mysql_query("SELECT * FROM userstats WHERE user_id = '$uid'");
while ($fetch = mysql_fetch_array($pullUserStats)) {
    $curstat = $fetch[$statinc];
}

mysql_query("UPDATE userstats SET $statinc=('$curstat' + '$incamount') WHERE user_id='$uid'"); //LINE 76

これは私が問題を抱えているところです。間にいくつかのコーディングがありますが、私のエラーは次のとおりです。

4

2 に答える 2

1

このコードの背後にあるロジックにはいくつか問題があり、実際に実行しているように見えるようにコード化されていないように見えるか、または実行したいことを実行していない可能性があります。

最初のことは、コードを書いた方法では、ループ内の一連の結果をループしたいように見え、whileループの最後に到達すると$statinc、クエリの LAST 結果の値になることです。 .

SELECT * FROM items WHERE item_id = '$itemid'は、 id フィールドを持つ多数のアイテムを持っているか、単に名前をitem_id付けるべきものに名前を付けたことを示唆しています。iditem_id

2 番目のケースの場合、項目をロードする最初のクエリは実際には次のようになります。

$pullItem = mysql_query("SELECT * FROM items WHERE item_id = '$itemid'");
$item = mysql_fetch_array($pullItem); //There's only one item to be returned, no need to loop over the array over and over again
$statinc = $item['statinc'];

これは、2 番目のクエリが次のようになることも意味します。

$pullUserStats = mysql_query("SELECT * FROM userstats WHERE user_id = '$uid'");
$userstat = mysql_fetch_array($pullUserStats);
$curstat = $userstat[$statinc];

これにより、 userstat が空のクエリを返しているため、元のコードで$curstatは決して設定されていないと思います。

$increase_stat_to = $curstat + $incamount;
mysql_query("UPDATE userstats SET $statinc=('$increase_stat_to') WHERE user_id='$uid'");
于 2012-07-16T18:17:47.193 に答える
0

エラーは自明$curstatですが、設定されていません。while ループで、 の結果をエコーアウトして、$fetch[$statinc];実際に有効な値が返されていることを確認します。そうでない場合は、mysql クエリの構文を確認してください。mysql_query が有効な結果セットを返さない場合、while ループは実行されていない可能性が$curstatあります

今後、このようなエラーが発生した場合は、クエリと関連する変数をエコーアウトして、phpMyAdmin でテストし、正しいクエリが生成されていることを確認してください。

私の回答にもかかわらず - Antherはあなたのコードの品質に関する多くの情報を投稿しています。

于 2012-07-16T18:30:58.883 に答える