2012-06-26 8 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')를 \ "비밀번호 ('a9eb42e1b3be829ef42972ea9abab334')로 변경하고 다시 확인하십시오. –

+0

@mohammadfalahat 비밀번호 (...)를 따옴표로 추가하면 리터럴 문자열로 전달됩니다. –

답변

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에 대한 질문입니다. –

+0

또한 db 리소스 링크를 쿼리가 아닌 mysql_affected_rows의 매개 변수로 보내야합니다. –

관련 문제