2012-03-28 6 views
1

私は私のデータベースにこのSQLクエリ走った:私はphpMyAdminの中でそれをやったし、それは行が影響を受けたことを私に示した。しかし、私はmethod = 'paysafecard' , amount = 25誤って奇妙なSQLクエリを指定しました。何が起こった?

を設定する意味もちろん

update payments set method = 'paysafecard' AND amount = 25 WHERE payment_id IN (1,2,3,4,5,...) 

を。再度実行した後、影響を受ける行は0行でした。

データベースで何が変更されているかわかりませんが、これは何ができましたか?

私のテーブルは次のようになります。私は 実行しています

CREATE TABLE IF NOT EXISTS `payments` (
    `payment_id` int(11) NOT NULL AUTO_INCREMENT, 
    `method_unique_id` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `method` enum('moneybookers','paypal','admin','wallet','voucher','sofortueberweisung','bitcoin','paysafecard','paymentwall') COLLATE utf8_unicode_ci NOT NULL, 
    `method_tid` int(11) DEFAULT NULL, 
    `uid` int(11) NOT NULL, 
    `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, 
    `plan` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `expires_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `amount` decimal(8,2) NOT NULL, 
    `currency` enum('EUR','USD','BTC') COLLATE utf8_unicode_ci NOT NULL, 
    PRIMARY KEY (`payment_id`), 
    UNIQUE KEY `method` (`method`,`method_tid`), 
    UNIQUE KEY `method_unique_id` (`method_unique_id`,`method`), 
    KEY `expires_at` (`expires_at`), 
    KEY `uid` (`uid`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=8030 ; 

- Serverのバージョン:5.1.41 - PHPバージョン:5.3.2-1ubuntu4.11

+0

'(* 1,2,3,4,5 ...)のpayment_idをどこから選択して実行することができますか? 'それでは、あなたは何が変わったのかというあなた自身の質問に答えることができます。基本的にこれは 'set method =( 'paysafecard' AND amount = 25)'と解釈され、2つの値をANDして悪い結果を得ようとしています。 – jzworkman

+0

または 'SELECT 'paysafecard' AND amount = 25'は何を表示しますか?私はブール値へのキャストのいくつかの並べ替えを想像するだろうか?編集: 'メソッド'が '0'に設定されているように見えます... –

+0

where句に一致するIDを確認しましたが、変更されたデータは表示されません。残りはうまく見えます。限り、私は何も変わったとは言えませんが、なぜ影響を受けた行数が... –

答えて

5

これはにつながるとメソッドフィールドは、where句に適合するすべてのレコードに対して '0'に設定されます。これは以下のように解釈される

set method = ('paysafecard' AND amount = 25)

これは、論理AND、及び(あなたの列の対応するフィールドに解析されます)これらのレコードのブール値の結果です。

+0

が正しいと言えます。したがって、このメソッドは空白です。 –

+0

さて、基本的にブール値を取得し、それを解析して列のデータ型に合わせようとします。 – jzworkman

関連する問題