2012-07-10 97 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 2012-07-10 15:40:07

+0

我有这样命名的列,因为它们每个都是一个'enum'字段,它有很多可能的选项,每个字段可以用于不同的站点 – ZeLoubs 2012-07-10 15:41:25

回答

2

试试这个:

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

看看here

+0

+1'mysqli_affected_rows'函数的参数应该是链接(由mysqli_connect返回)而不是结果集。 – spencer7593 2012-07-10 18:47:58