2012-06-26 3 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' или' false "после обновления. Вместо этого вам нужно использовать спецификатор соединения. Замечание: вы не выполняете проверку ошибок после запроса. См. Руководство, чтобы узнать, как это сделать. –

+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, и, безусловно, нет, если этот результат равен только true или false. Вы можете использовать его как это:

$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, а не запрос –

Смежные вопросы