2014-10-13 1 views
0

mysqli :: $ affected_rows/mysqli_affected_row()는 어떤 이유로 든 나를 위해 0을 반환합니다. 이 내가 내 기능 :Mysqli 실제로 0 일 때 0의 행 값을 변경했습니다.

function set_timezone_value($sUsername, $sTimeZone){ 

    $_SESSION["timezone_value"] = $sTimeZone; 

    //get a connection to the LDAP db 
    $db_con = get_db_con(LDAP, TRUE); 

    $sQuery = "UPDATE user_info " . 
       "SET sTimeZone = '". $db_con->real_escape_string($sTimeZone) . "' " . 
       "WHERE uid = '". $db_con->real_escape_string($sUsername) ."'"; 
    do_query($sQuery, $db_con); 
    var_dump($db_con->info); 
    $iAffectedRows = $db_con->affected_rows; 
    $db_con->close(); 

    return $iAffectedRows; 
} 

do_query 및 get_db_con는 단순히 오류가있는 경우 이메일을 전송하기위한 추가 코드 mysqli-> 쿼리 및 새로운 mysqli 래퍼.

해당 var_dump는 행이 발견되었지만 변경되지 않았 음을 나타내는 string(40) "Rows matched: 1 Changed: 0 Warnings: 0"을 인쇄합니다. 이것은 코드가 실행되기 전후에 phpMyAdmin의 행을 볼 때 행이 실제로 새 표준 시간대로 업데이트되고 나머지 시간대가 올바른 표준 시간대로 업데이트되기 때문에 올바르지 않습니다. 그럼에도 불구하고 절차 적 또는 OO 스타일을 사용하는지 여부에 관계없이 affected_rows 및 info는 행에 변경이 없었 음을 나타냅니다.

내 코드가 엉망이 될까요?

+0

쿼리 실행과 영향을받은 행 수 사이에 SQL 쿼리가 존재하지 않습니까? 'mysqli_affected_row()'의 반환 값은이 함수가 마지막 쿼리에 바인딩되어 있기 때문에 실행 된 다른 쿼리 (예 :'$ db_con-> info' 변수를 채우기 위해)는 mysqli_affected_row()의 반환 값을 변경할 수 있습니다. – CodeZombie

+0

다른 호출이 없습니다.이 호출은 단일 스레드 시스템에서 실행 중이며 함수 호출은 서로 같습니다. 또한이 함수를 호출하기 위해 문제를 격리했으며, 여전히 발생합니다. 이상한 점은, 나는 다른 곳에서 똑같은 방식으로 같은 결과를 사용한다는 것입니다. – TheBat

답변

0

설명하는 동작이 기본값입니다. 기존 행과 일치하는 값을 갖는 UPDATE 문은 0 행에 영향을줍니다. 그 동안 업데이트 할 레코드가 삭제되었는지 아니면 변경 사항이 없는지 여부를 알지 못해서 이는 매우 성가신 일입니다.

$options = array('MYSQL_ATTR_FOUND_ROWS' => true); 

이 플래그를 설정하면 발견 (일치) 행의 수, 변경된 행이 아닌 수를 반환 : 당신이 PHP의 PDO와 PHP 5.3+를 사용하는 경우

는, 그 동작을 변경하는 옵션이 있습니다. http://www.php.net/manual/en/ref.pdo-mysql.phphttp://www.php.net/manual/en/pdostatement.rowcount.php#104930

+0

행이 값과 일치하지 않습니다. 생성 된 sql 명령을 phpmyadmin을 통해 실행했으며 영향을받은 행 하나를 반환합니다. 'America/Chicago'의 현재 값과 'America/Los_Angeles'로 변경되면 여전히 일치하는 1을 얻고 0을 변경합니다. – TheBat

관련 문제