2012-07-10 2 views
0

클라이언트 용 로컬 목록 사이트를 편집 할 수있는 웹 페이지를 만듭니다. mysql과 php에서 INSERT ... ON DUPLICATE KEY UPDATE 구문을 사용하고 있습니다.중복 키 업데이트에 삽입하면 0의 값이 반환됩니다.

편집-명부-exec.php

<? 
    //Array to store validation errors 
    $errmsg_arr = array(); 

    //Validation error flag 
    $errflag = false; 

    $member_id = $_SESSION['MEMBER_ID']; 
    $userresult = mysqli_query($link, "SELECT username 
            FROM  members 
            WHERE  member_id = '$member_id'"); 
    $row = mysqli_fetch_array($userresult); 
    $username = $row['username']; 


    //run a for loop to check for duplicates 
    for ($i=1; $i < 10; $i++) { 
     $selectbox = $_POST['listing'.$i]; 

     for ($j=1; $j < 10; $j++) { 
      if ($j != $i) { 
       if ($_POST['listing'.$j] === $selectbox && $_POST['listing'.$j] != "") { 
       $errmsg_arr[] = "Duplicate listing source '$selectbox'"; 
       $errflag = true; 
       break; 
       } 
      } 
     } 
    } 

    //if there are input validations redirect back to main page 
    if($errflag) { 
     $_SESSION['ERRMSG_ARR'] = $errmsg_arr; 
     session_write_close(); 
     header("location: edit-listings.php"); 
     exit(); 
    } 

    //run loop to define post variables 
    for ($k=1; $k < 10; $k++) { 
     ${'listing'.$k} = mysqli_real_escape_string($link, $_POST['listing'.$k]); 
     ${'listing'.$k.'_site'} = mysqli_real_escape_string($link, $_POST['listing'.$k.'_site']); 
    } 


    //insert listings into local_listings table for the user 
    $qry = "INSERT INTO local_listings (
         member_id, 
         username, 
         listing1, 
         listing1_site, 
         listing2, 
         listing2_site, 
         listing3, 
         listing3_site, 
         listing4, 
         listing4_site, 
         listing5, 
         listing5_site, 
         listing6, 
         listing6_site, 
         listing7, 
         listing7_site, 
         listing8, 
         listing8_site, 
         listing9, 
         listing9_site) 
       VALUES (
         '$member_id', 
         '$username', 
         '$listing1', 
         '$listing1_site', 
         '$listing2', 
         '$listing2_site', 
         '$listing3', 
         '$listing3_site', 
         '$listing4', 
         '$listing4_site', 
         '$listing5', 
         '$listing5_site', 
         '$listing6', 
         '$listing6_site', 
         '$listing7', 
         '$listing7_site', 
         '$listing8', 
         '$listing8_site', 
         '$listing9', 
         '$listing9_site') 
       ON DUPLICATE KEY UPDATE 
         listing1  = '$listing1', 
         listing1_site = '$listing1_site', 
         listing2  = '$listing2', 
         listing2_site = '$listing2_site', 
         listing3  = '$listing3', 
         listing3_site = '$listing3_site', 
         listing4  = '$listing4', 
         listing4_site = '$listing4_site', 
         listing5  = '$listing5', 
         listing5_site = '$listing5_site', 
         listing6  = '$listing6', 
         listing6_site = '$listing6_site', 
         listing7  = '$listing7', 
         listing7_site = '$listing7_site', 
         listing8  = '$listing8', 
         listing8_site = '$listing8_site', 
         listing9  = '$listing9', 
         listing9_site = '$listing9_site'"; 

    $result = mysqli_query($link, $qry); 

    if (mysqli_affected_rows($result) < 1) { 
     $errmsg_arr[] = "Unable to insert listings for $username"; 
     $_SESSION['ERRMSG_ARR'] = $errmsg_arr; 
     header ("location: edit-listings.php"); 
    } 
    elseif (mysqli_affected_rows($result) === 1) { 
     $_SESSION['RESULT'] = "New listings for '$username' inserted successfully"; 
     header ("location: edit-listings-success.php"); 
    } 
    elseif (mysqli_affected_rows($result) === 2) { 
     $_SESSION['RESULT'] = "Listings for '$username' have been updated"; 
     header ("location: edit-listings-success.php"); 
    } 


?> 

데이터가 성공적으로 local_listings 테이블에 삽입되지만 mysqli_affected_rows 항상 0의 값을 반환 : 아래는 코드입니다. 새 행을 삽입하는 경우 1 값을 반환하거나 단순히 업데이트하는 경우 2 값을 반환해야합니다. 왜 이런 일이 일어나고 있는거야?

+0

하십시오을 데이터베이스 테이블의 컬럼에 대한 몇 가지 의미있는 이름을 사용합니다. – Lion

+0

여러 열의 가능한 옵션을 가진 각각의 열거 형 필드이고 각 열은 다른 사이트에있을 수 있기 때문에 이름이 같은 열이 있습니다 – ZeLoubs

답변

2

이 시도 :

if (mysqli_affected_rows($link) < 1) { 
... your code 
} 

이보고 here

+0

+1 mysqli_affected_rows 함수에 대한 인수는 mysqli_connect에 의해 반환되어야합니다. 결과 집합이 아닌 – spencer7593