2012-03-07 3 views
0

이상한 것은 내가 이상한 mysql을-일이 일이 일어나고 있고, 다음과 같은 코드에 관한 다음 group = $group을 가진 사용자가있는 경우 나, 확인하고mysql을 - 갱신을 선택 문

$res = mysql_query("SELECT * FROM users WHERE group='".$group."'"); 
if (mysql_num_rows($res)==1) { 

$row = mysql_fetch_assoc($res); 
$uid = $row['uid']; 

$user_update = mysql_query("UPDATE fe_users SET group = 5 WHERE group='".$group."'");   

return 'ok'; 

} else { 

return 'not ok'; 

} 

. 그렇다면 그룹은 5로 업데이트되고 이후에 문자열 "ok"가 반환됩니다. group=$group의 사용자가 없으면 "not ok"문자열이 반환됩니다.

group=$group 사용자가있는 경우 업데이트가 올바르게 수행되지만 "ok"를 반환하는 대신 php는 "ok"를 반환하는 것처럼 매우 쉽습니다. 위의 실행 된 선택에 대해 소급하여 업데이트에 대한 고려가 이루어졌습니다. 나는 이것을 이해하지 못한다. 어떤 도움이라도 대단히 감사 할 것입니다. 나는이 어떤 장점이 있는지 확실하지 오전하지만 SELECT 및 UPDATE에이 스타일을 사용하려고 미리

고맙습니다, 재이든

+0

컨텍스트 란 무엇입니까? 이것은 함수의 코드인가? 이것은 아약스 응답 코드입니까? – alesdario

+0

그것은 함수입니다, 아약스와 나는 매개 변수없이 시나리오를 만들었지 만 여전히 똑같은 것입니다. if-part에서 update-query를 제거하면 if-part 내의 다른 모든 코드는 올바르게 실행되지만 update-query가 제거되지 않으면 if-part 내에서 실행되는 유일한 것입니다. 쿼리 외에도 else-part가 실행됩니다. – jayden

+0

update-query가 if 문에 있고 else 문에 없기 때문에 매우 이상합니다. 코드를 단계별로 디버깅 할 수 있습니까? 그렇지 않다면 update-statement 다음에'die ('here')'를 넣고 함수가 실행을 멈추는 지 살펴보십시오. – alesdario

답변

0

나는 '그룹은'당신이 그것을 변경하거나

$res = mysql_query("SELECT * FROM users WHERE `group`='".$group."'"); 

$user_update = mysql_query("UPDATE fe_users SET `group` = 5 WHERE `group`='".$group."'"); 

처럼 사용하고 수를 사용할 수있는, 필드 이름으로 사용하고 예약 된 키워드 ($ 고해상도 생각) == 1 mysql_num_rows ($ res) == 1 대신에 문제가 있다면 == 1.

참조 :Mysql Reserved keywords.

0

명령 : 문자열을 사용하지 않고 그룹 = '$ 그룹'조인 WHERE. 그 외에도 나는 왜 당신이 업데이트를 받고 "ok"를 반환하지 않는지를 알 수없는 것처럼 보입니다.

0

mysql_num_rows($res)==1이 맞는지 확인하면 해당 그룹에 정확히 한 명의 사용자가있는 경우 ok가 표시됩니다. 두 명 이상의 사용자가있는 경우 not ok을 반환합니다. 아마 네가 원하는대로 안했을거야, 그렇지? 나는 mysql_num_rows($res)>=1인지 확인해야한다고 생각합니다.

0

는 당신과 같이 당신의 브라켓의 위치를 ​​수정하고 NUM_ROWS 확인 변경 고려해 볼 수 있습니다 :

$res = mysqli_query("SELECT uid FROM users WHERE `group` ='".$group."'"); 
if (mysqli_num_rows($res)>0) {//there was a result 
    while($row = mysqli_fetch_assoc($res)){ 
     // grab the user id from the row 
     $uid = $row['uid']; 
     // and update their record 
     $user_update = mysqli_query("UPDATE fe_users SET `group` = 5 WHERE `group`='".$group."'");   
     if(mysqli_num_rows($user_update)==1){ 
      return 'ok, updated user'; 
     } else { 
     // database error 
      return 'not ok, unable to update user record'; 
     } 
    }//end while row 
}else{ 
    return 'No results were found for this group.'; 
} 

당신이 원하는 바로 열을 선택하면 쿼리의 오버 헤드를 줄일 수 있습니다. 초기 결과를 1 대신에 0과 비교하여 많은 구성원이있는 그룹을 허용합니다. while 루프에서 update 함수를 래핑하면 모든 반환 된 결과를 반복하고 각 결과에 대한 레코드를 업데이트 할 수 있습니다. 업데이트 작업에서 성공을 확인하기 위해 'ok'/ 'not ok'를 반환하는 테스트를 이동하면 데이터베이스 오류를 격리 할 수 ​​있습니다. 마지막 else 문은 그룹의 구성원이 없으므로 업데이트 작업이 수행되지 않았 음을 알려줍니다.

미래의 호환 코드를 위해 "mysql_query"PHP 함수 계열이 공식적으로 사용되지 않으므로 mysqli를 사용하는 것이 좋습니다. 빠른 시작은 http://www.php.net/manual/en/mysqli.query.php을 참조하십시오. 이는 거의 동일한 내용입니다.