2012-03-28 47 views
1

我跑在我的數據庫這個SQL查詢:意外指定奇怪的SQL查詢。發生了什麼?

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

當然,我的意思設定method = 'paysafecard' , amount = 25

但是我在phpMyAdmin做到了,它讓我明白了行受到影響。再次運行後,它顯示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 ; 

我正在 - 服務器版本:5.1.41 - PHP版本:5.3.2-1ubuntu4.11

+0

你可以運行一個'select * from payment where payment_id in(1,2,3,4,5 ...)'來查看改變了什麼嗎?那麼你應該能夠回答你自己關於變化的問題。基本上這被解釋爲'set method =('paysafecard'AND amount = 25)',它試圖將這兩個值合併在一起給出不好的結果。 – jzworkman 2012-03-28 18:57:55

+0

或者'SELECT'paysafecard'AND amount = 25'顯示什麼?我想像某種布爾型轉換?編輯:看起來'方法'將被設置爲'0'我認爲... – 2012-03-28 18:58:44

+0

我檢查了符合where子句的id,我看不到任何更改的數據。其餘的看起來不錯。據我所知沒有任何變化,但爲什麼然後受影響的行數... – 2012-03-28 19:02:26

回答

5

這將導致對於所有符合where子句的記錄,方法字段都設置爲'0'。

它被解釋爲以下幾點:

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

這是一個邏輯AND,並在這些記錄(將被解析到你列的對應字段)一個布爾值結果。

+0

正確。因此該方法是枚舉它是空白的... – 2012-03-28 19:07:33

+0

是的,基本上它得到一個布爾值,並試圖解析,以適應列的數據類型。 – jzworkman 2012-03-28 19:09:22