0

このクエリが機能しないのはなぜですか?!?

エラー

解析エラー: 構文エラー、5 行目の E:\xampp\htdocs\pf\shop\buy.php の予期しない T_STRING

変数の情報例

$character->islots = 20

$chatacter->name = [RE] ティズル

$e2 = 10

関数

function increaseSlots($e2) {
    $slots = ($character->islots)+($e2);
    mysql_query('UPDATE `phaos_characters` SET `inventory_slots`="'.$slots.'" WHERE `name`="'.$character->name.'"'); // <-- Line 5
    if (mysql_affected_rows() != 0) {
        echo 'Inventory Size Incresed By '.$e2.' Slots';
    }else{
        echo mysql_error();
    }
}
4

4 に答える 4

3

ドキュメントを見てください: http://php.net/manual/en/function.mysql-num-rows.php

結果セットから行数を取得します。このコマンドは、実際の結果セットを返す SELECT や SHOW などのステートメントに対してのみ有効です。INSERT、UPDATE、REPLACE、または DELETE クエリによって影響を受ける行数を取得するには、mysql_affected_rows() を使用します。

mysql_affected_rows()PDO または mysqliを使用する必要があります。

于 2012-09-18T20:20:36.077 に答える
2
$slots = ($character->islots)+($e2);

タイプミスがあるようです。試す:

$slots = ($character->slots)+($e2);
于 2012-09-18T20:20:54.400 に答える
1

最初に、 PHP のドキュメントに記載されているように、mysql_num_rows は SELECT または SHOW ステートメントに対してのみ有効な結果を返すことを知っておく必要があります。特定のニーズに合わせてmysql_affected_rows()を使用できます。

ただし、(使用している) 古い PHP MySQL API は段階的に廃止されるため、DB 接続のニーズには mysqli または PDO を使用することをお勧めします。

ただし、要件を維持しながら、次の構文を使用して、MySQL エラーがスローされた場合に確実に受け取るようにすることができます。PHP スクリプトは停止しますが、エラーが表示されます。

$query = sprintf('UPDATE `phaos_characters` SET `inventory_slots`=%d WHERE `name`="%s"',$slots,$character->name)
$result = mysql_query($query) or die(mysql_error());

最終的なアイデアとして、このような状況では、結果を印刷し、$queryphpMyAdmin などで手動で実行して何が起こるかを確認するのに役立ちます。

于 2012-09-18T20:41:27.590 に答える
0

Bleh...私は当分の間それをするためのより良い方法を見つけました..あなたのみんなの時間を無駄にしてすみません...

関数を処理する前に、$characterオブジェクトを変数にスローしました。

function increaseSlots($e2,$charname,$charslots) {
    $slots = $charslots+$e2;
    mysql_query('UPDATE `phaos_characters` SET `inventory_slots`="'.$slots.'" WHERE `name`="'.$charname.'"');
        if (mysql_affected_rows() != 0) {
            echo 'Inventory Size Incresed By '.$e2.' Slots';
        }
}
于 2012-09-18T20:49:37.467 に答える