2013-06-14 3 views
-5

아무도 @mysql_affected_rows에 대한 반환 값의 모든 가능성을 말해 줄 수 있습니까? 왜냐하면 나는 if(@mysql_affected_rows())을 확인하고 있기 때문입니다. 대부분의 경우 1 (성공) 또는 0 (성공하지 않음)을 리턴합니다. 그래서 제대로 작동했습니다. 그러나 경우에 따라 업데이트가 성공하지 못하면 0 이외의 값을 반환합니다.Possibilites @mysql_affected_rows가 값을 반환합니까?

나는 그것이 무엇을 반환하는지 안다. 그러나 그것은 그 고리 안으로 들어온다. 내부 루프 데이터를 삽입하려고합니다. 하지만 그것은 SQL에 중복 오류를 보여줍니다. 참조 용으로 아래 코드를 확인하십시오.

$sqlU = sprintf("UPDATE %s SET count = count + 1 
          WHERE id = %d", 'table', 123); 
mysql_query($sqlU); 
if([email protected]_affected_rows()) { 
    $sqlI = sprintf("INSERT INTO %s (id) VALUES (%d)", 
           'table', 123); 
    mysql_query($sqlI); 
} 
+0

(! @ 있으며, mysql_affected_rows()) {'? –

+0

PHP 문서는 영향을받는 행의 수 또는 실패시 -1을 반환한다고 알려줍니다. SO를 묻지 않고 정보를 얻는 것은 그리 어렵지 않습니다. 반면에 데이터베이스 통신을 더 이상 사용하지 않는 방법을 사용하고 쿼리가 성공하는지 여부도 확인하지 않습니다. 기본적으로 코드에서 너무 많은 나쁜 일이 일어나고 있습니다. PDO를 조사해야합니다. –

+0

코드도 의미가 없습니다. 행을 왜'UPDATE'하고 나중에 같은 것을 다시 INSERT하면됩니까? – ferdynator

답변

2

먼저 mysql_* 함수는 더 이상 사용되지 않습니다. mysql_affected_rows()은 모든 경우에 정수를 반환하는 것처럼 보입니다. 쿼리가 실패하면 -1을 반환합니다.

mysql_affected_rows() 대신 실제로 필요한 것은 경쟁 조건에 대해 열려 있지 않은 적절한 쿼리입니다. 당신이 '의 경우처럼 사용하는 이유

INSERT INTO table (id, count) VALUES (123, 0) ON DUPLICATE KEY UPDATE count = count + 1

관련 문제