2012-06-26 78 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中的参数,而不是查询 –