2010-05-08 1 views
3

사용자가 텍스트 영역에 텍스트 블록을 입력하는 쿼리가 있습니다. 그들은이 정보를 데이터베이스에 저장할 수 있습니다. 문제는 그들이 정보를 변경하지 않았거나 정보가 이미 데이터베이스에있는 데이터와 일치하면 영향을받은 행에 대해 '0'을 받는다는 것입니다. 일반적으로 영향을받는 행이 없을 때 쿼리가 실패했다는 오류를 표시합니다. 더 구체적인 오류를 표시 할 수 있도록 데이터가 이미 존재하므로 영향을받은 행이 0 인 것을 어떻게 알 수 있습니까?제공된 정보가 이미 데이터베이스에있는 데이터와 일치하기 때문에 MySQL UPDATE 쿼리가 실패한 경우 어떻게 알 수 있습니까?

답변

3
:이 경우에는 영향을받는 행의 수를 0 인 경우 반환 된 오류 번호는 PHP 코딩하는 경우 0

, 당신은 같은 것을 할 수 있습니다 확인하실 수 있습니다

UPDATE 문이 행과 일치하지 않는 경우 영향을받은 행이 0이되는 또 다른 이유가 있습니다. 예를 들어 : 더 행 id = 1234에 존재하지 않는 경우

UPDATE MyTable SET field = 'content' WHERE id = 1234; 

0 영향을받는 행을 제공합니다. 이것도 오류가 아니며 단지 행과 일치하지 않는 것이 단지 UPDATE입니다.

이 경우를 감지하는 방법은 SELECT을 사용하여 이러한 행이 있는지 확인하는 것입니다. 행이 있음을 확인할 수 있지만 UPDATE이 0 행에 영향을 미쳤다 고 말하면 변경하려고 시도한 값이 실제로 이미 데이터베이스에있는 행이라는 것을 알고 있습니다.

SELECT COUNT(*) FROM MyTable WHERE id = 1234; 

하지만 구분이 중요하지 않을 수 있습니다. mysql_error()에 @BoltClock에서 제시 한대로 오류가 있다고보고하면 오류가보고 될 수 있습니다. * 오류가 없다면 사용자에게 "변경 사항 없음"을보고하면됩니다.

* 참고 : 당신이하지이 mysql_error()에 의해 반환 된 문자 메시지를보고해야합니까 . 이 메시지는 사용자에게 혼동을 줄 수 있으므로 좀 더 친숙한 것을보고하는 것이 좋습니다.

+0

구별이 중요하지 않을 수 있음을 지적 해 주셔서 감사합니다. 나는 당신이 제안한 것처럼 일반적인 오류로 만들었습니다. –

2

쿼리가 성공 했으므로 MySQL에서 오류 번호를 반환하지 않아야합니다 (오류 번호가 0이면).

// ... mysql_query() with the UPDATE query 

if (mysql_affected_rows() == 0 && mysql_errno() == 0) 
{ 
    // Data was not changed 
} 
+1

"mysqli"를 바로 사용하면 "mysql"은 가치가 떨어집니다. –

관련 문제