-2

PHP スクリプトで MySql update ステートメントを使用して、列のデータを更新しようとしています。MySql データベースのテーブルは users と呼ばれ、関連する列は sms と username です。

mysql_query
("UPDATE users set sms = $_SESSION[sms]+ 50 WHERE username = $_SESSION[username]")
;
echo mysql_error();

スクリプトを実行した後に発生するエラーは次のとおりです。

Unknown column 'maihannijat' in 'where clause'

その理由は、ユーザー名も列名のほかに変数であるためです。変数は、アクティブなセッションのユーザー名を意味します。

WHERE 句の後にユーザー名変数をエスケープして、正確な [username] テキスト タイプを WHERE 単語の後に渡したいと考えています。

4

2 に答える 2

2

これで問題は解決しますが...

mysql_query
("UPDATE users set sms = ".$_SESSION['sms']." + 50 WHERE username = ".$_SESSION['username'])
;

...クエリに 3 つの大きな間違いがあります。 "like内には単純な変数しか記述できません"SELECT $x FROM $y"。第 2 に、連想配列のキーを設定'または指定する必要があります。第三に、あなたは を使用していますが、これは数年前から時代遅れになっています。代わりに使おう!"$_SESSION["myvar"]mysqlmysqli

更新:クエリが何をするのかわかりませんが、これは別の方法かもしれません:

mysql_query
("UPDATE users set sms = ".($_SESSION['sms'] + 50)." WHERE username = ".$_SESSION['username'])
;
于 2013-07-07T19:07:59.687 に答える
-1

ステートメントが混乱する (クエリの一部としてテーブル名を解釈しようとする) のを避けるmysqlために、競合を避けるために、mysql 予約名を持つ行またはテーブルをバッククォート (`) で囲む必要があります。

例: table という名前のテーブルがあります(そもそもこれを使用すべきではありません)。しかし、本当にその名前をテーブル名として使用したい場合は、

mysql_query("SELECT * FROM `table`")

また、mysql ステートメントの外でも計算を行う方がよいでしょう。あなたの場合、それはもっと似ているはずです:

$final = $_SESSION[sms]+50次に$final、クエリで使用します

"UPDATE users set sms = '$final' WHERE username = `$_SESSION[username]` "

最後にもう 1 つ:mysql_関数を使用しないでください。学んで使うmysqli_/PDO

編集:

$final =  $_SESSION[sms]+ 50;

    mysql_query("UPDATE users set sms = '$final'
    WHERE username = ".$_SESSION['username']." ")or die(mysql_error());
于 2013-07-07T19:07:41.827 に答える