du42561
du42561
2012-07-10 15:36

在重复键更新时插入返回值0

已采纳

I am creating a web page where you can edit local listing sites for clients. I am using the INSERT ... ON DUPLICATE KEY UPDATE syntax in mysql and php. Below is the code:

edit-listings-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");
    }


?>

The data is successfully inserting into the local_listings table but mysqli_affected_rows always returns a value of 0. It should be returning a value of 1 if it inserts a new row or 2 if it simply updates. Any ideas why this is happening?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

  • dousui8263 dousui8263 9年前

    Try this:

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

    take a look here

    点赞 评论 复制链接分享

相关推荐