it-swarm.dev

db_affected_rows ()는 쿼리가 잘못된 경우 "1"을 반환합니다.

UPDATE user SET creator = 'creator'"와 같은 검색어가 있습니다. "user"테이블에는 "creator"열이 없으므로 db_affected_rows() shoud는 1이 아닌 −1을 반환합니다.

왜?

pdate : mysql_affected_rows()은이 쿼리에 대해 -1을 반환합니다. "제작자"열 (고유)을 만들었습니다. 사용자 테이블을 업데이트 한 후 "사용자 경고 : 중복 항목"오류가 발생하지만 db_affected_rows()은 여전히 ​​1을 반환합니다.

3
user780

편집 : db_affected_rows ()는 워치 독이 켜져 있기 때문에 예기치 않은 값을 반환합니다. 실행 한 후 db_affected_rows () 호출 전에 다른 쿼리가 있는지 확인했고 충분히 확신했습니다.

INSERT INTO 워치 독 (uid, 유형, 메시지, 변수, 심각도, 링크, 위치, 참조 자, 호스트 이름, 타임 스탬프) 값 (1, 'php', '% file in % file on line % line.', 'a : 4 : {s : 6 :\"% error \"; s : 12 :\"user warning \"; s : 8 :\"% message \"; s : 104 :\" 'field list'의 알 수없는 'name2'열\n 쿼리 : 사용자 업데이트 SET name2 = 'a'\ "; [...]

따라서 워치 독이 오류를 로깅하기 때문에 db_affected_rows ()는 1을 반환합니다. 따라서 쿼리에 오류가 있는지 여부를 확인하고 성공한 경우 영향을받는 행을 계산하는 올바른 방법은 다음과 같습니다.

$result = db_query("UPDATE users SET name2 = 'a'"); 
if ($result) {
  printf("Records affected: %d\n", db_affected_rows());
}
else {
  print "Query not successful";
}

도움이 되었기를 바랍니다!


후손에 대한 원래 답변 :

나는 당신의 쿼리에 대한 코드를 봐야 할 것입니다. 이것을 실행하십시오 :

<?php
function db_affected_rows() {
  global $link;
  return mysql_affected_rows($link);
}

$link = mysql_connect('localhost', 'root', 'root');
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
mysql_select_db('d6.devl');

/* this should return the correct numbers of deleted records */
mysql_query("UPDATE user SET creator = 'creator'");
printf("Records affected: %d\n", mysql_affected_rows());

printf("Records affected: %d\n", db_affected_rows());

나는했고 그것은 잘 작동했습니다.

$ php -f test.php

영향을받는 레코드 : -1

영향을받는 레코드 : -1

3
Entendu

Drupal 외부에서 mysql_query(), mysql_affected_rows() 등으로 재현 해보십시오.

이것은 PHP 버전 또는 이와 유사한 버전의 문제 일 수 있습니다. Drupal 호출을 전달하기 만하면 자체적으로 아무 작업도 수행하지 않음).

1
Berdir