2012-06-26 97 views
0

我在整理這個PHP/MySQL問題時遇到困難。讓我告訴你我的數據庫,並說明我的情況:mysql_affected_rows在成功查詢時返回False?


創建表:

CREATE TABLE IF NOT EXISTS `users` (
    `id` int(50) NOT NULL AUTO_INCREMENT, 
    `active` varchar(20) NOT NULL, 
    `activation` varchar(15) NOT NULL, 
    `firstName` longtext NOT NULL, 
    `lastName` longtext NOT NULL, 
    `passWord` longtext NOT NULL, 
    `changePassword` text NOT NULL, 
    `emailAddress1` longtext NOT NULL, 
    `emailAddress2` longtext NOT NULL, 
    `emailAddress3` longtext NOT NULL, 
    `role` longtext NOT NULL, 
    PRIMARY KEY (`id`), 
    FULLTEXT KEY `name` (`firstName`,`lastName`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ; 

插入值:

INSERT INTO `users` (
    `id` , 
    `active` , 
    `activation` , 
    `firstName` , 
    `lastName` , 
    `passWord` , 
    `changePassword` , 
    `emailAddress1` , 
    `emailAddress2` , 
    `emailAddress3` , 
    `role` 
) VALUES (
    NULL, '1000000000', 'abcdefghijklmno', 'John', 'Smith', '*24D7FB97963C40FE5C56A6672F9560FC8B681508', 'on', '[email protected]', '', '', 'User' 
); 

更新的值:

$affected = mysql_query(UPDATE users SET passWord = PASSWORD('a9eb42e1b3be829ef42972ea9abab334'), changePassword = 'on' WHERE emailAddress1 = '[email protected]', $dbID); 

if (mysql_affected_rows($affected)) { 
    //Never runs 
} 

以上UPDATE q uery在我的腳本,phpMyAdmin和MySQL終端中執行得很好。然而,mysql_affected_rows($affected)總是給了我這個錯誤:

Warning: mysql_affected_rows() expects parameter 1 to be resource, boolean given 

我知道這意味着我的查詢失敗,但我每次進入數據庫的時候,我看到值已被更新。

從函數中刪除參數似乎清除了事情。但是,我寧願將標識符作爲函數參數,以確保我所指的是代碼保險。

任何想法,爲什麼這可能會這樣做?

謝謝你的時間。

+1

見說明書上'的mysql_query()':這是由設計,它將返回TRUE;或'在更新後錯誤。您需要改爲使用連接說明符。附註:您在查詢後沒有進行任何錯誤檢查。看到手冊,看看如何做到這一點。 –

+0

你在查詢時發生錯誤,請將PASSWORD('a9eb42e1b3be829ef42972ea9abab334')更改爲\「PASSWORD('a9eb42e1b3be829ef42972ea9abab334')\」並再次檢查 –

+0

@mohammadfalahat在PASSWORD(...)周圍添加引號會將其作爲文字字符串傳遞。 –

回答

3

http://php.net/mysql_query

Return Values

...

For other type of SQL statements, INSERT , UPDATE , DELETE , DROP , etc, mysql_query() returns TRUE on success or FALSE on error.

和:

int mysql_affected_rows ([ resource $link_identifier = NULL ])

這意味着mysql_affected_rows想要一個MySQL連接資源作爲參數。不是mysql_query的結果,當然如果結果只有truefalse,肯定不會。您可以使用這樣的:

$successful = mysql_query('UPDATE ...'); 

if ($successful) { 
    echo 'Affected rows: ' . mysql_affected_rows(); 
} else { 
    echo 'Fail: ' . mysql_error(); 
} 
1

變化:

$affected = mysql_query(UPDATE users SET passWord = PASSWORD('a9eb42e1b3be829ef42972ea9abab334'), changePassword = 'on' WHERE emailAddress1 LIKE '[email protected]', $dbID); 

和執行

+0

+1對於LIKE。沒想到那個! –

+0

還必須發送db資源鏈接作爲mysql_affected_rows中的參數,而不是查詢 –