使用ON DUPLICATE KEY子句时更新不起作用

时间:2018-01-25 03:21:22

标签: php mysql pdo on-duplicate-key

我在SO上发现了几个类似的问题,但我是PDO的新手,无法根据我的标准成功调整代码。
我不知道为什么这段代码不起作用。 我不知道为什么这段代码不起作用。 我不知道为什么这段代码不起作用。 我有桌面用户。 我有表格 我的代码html表单选择和代码php。

 <form method="POST" name="setform">
                <div class="moncompte">
                        <!-- pseudo-->  <label class="moncompteLabel" >Pseudo</label>
                                    <input type="text" name="pseudo" class="moncompteInput" autocomplete="off">
                </div>
                <div class="moncompte">
                        <!-- nom--> <label class="moncompteLabel">Nom d'utilisateur</label>
                                    <input type="text" name="fullname" class="moncompteInput" autocomplete="off">
                </div>
                <div class="moncompte">
                        <!-- email-->   <label class="moncompteLabel">Email</label>
                                    <input type="email" name="email" class="moncompteInput" autocomplete="off">
                </div>
                <div class="moncompte"> 
                         <!-- sexe-->   <label class="moncompteLabel"> Sélectionnez sexe </label>
                                <select name="genre" title="sexe" class="moncompteSelect">
                                        <option value="0" selected="selected">Homme</option>
                                        <option value="1">Femme</option>
                                        </select>
                </div>
                <div class="moncompte">
                   <!-- date--> <label class="moncompteLabel"> Date de naissance</label>
                            <div class="dateSelect">
                                    <select name="naissanceJ" title="jour" class="naissanceSelect" >
                                        <option value="0">jour</option>
                                        <option value="1" selected="1">1</option>
                                        <option value="2">2</option>
                                        <option value="3">3</option>
                                        <option value="4">4</option>
                                      </select>
                                      <select name="naissanceM" title="mois"  class="naissanceSelect">
                                        <option value="0">mois</option>
                                        <option value="1" selected="1">jan</option>
                                        <option value="2">fév</option>
                                        <option value="3">ma</option>
                                        <option value="4">avr</option>
                                      </select>
                                    <select name="naissanceA" title="année" class="naissanceSelect">
                                        <option value="0">année</option>
                                        <option value="2018" selected="1">2018</option>
                                        <option value="2017">2017</option>
                                        <option value="2016">2016</option>
                                      </select>
                            </div>
                 </div>

                <div class="moncompte">
            <input type="submit" name="enregistrer" value="enregistrer" class="moncompteSub">
                </div>

    </form>

代码php

  $idd = trim(htmlspecialchars($_SESSION['user_id']));
$id = filter_var($idd, FILTER_SANITIZE_NUMBER_INT);


    $pseudo = htmlspecialchars($_POST['pseudo']);
    $fullname = htmlspecialchars($_POST['fullname']);
    $email = htmlspecialchars($_POST['email']);
    $genre = htmlspecialchars($_POST['genre']);

    $stmt = $connect->prepare("INSERT INTO users(pseudo,email,naissancej,naissancem,naissancea,genre,fullname)
VALUES(:pseudo,:email,:naissancej,:naissancem,:naissancea,
:genre,:fullname) ON DUPLICATE KEY UPDATE 
     pseudo=:pseudo2,
     email=:email2,
     naissancej=:naissanceJ2,
     naissancem=:naissanceM2,
     naissancea=:naissanceA2,
     genre=:genre2,
     fullname=:fullname2 WHERE id=5 ");

$stmt->execute(array(
        ':pseudo'=> $pseudo,
        ':email'=> $email,
        ':naissancej'=> $naissanceJ,
         ':naissancem'=> $naissanceM,
        ':naissancea'=> $naissanceA,
        ':genre'=> $genre,
        ':fullname'=> $fullname,

        ':pseudo2'=> $pseudo,
        ':email2'=> $email,
        ':naissancej2'=> $naissanceJ,
         ':naissancem2'=> $naissanceM,
        ':naissancea2'=> $naissanceA,
        ':genre2'=> $genre,
        ':fullname2'=> $fullname
    ));

2 个答案:

答案 0 :(得分:0)

INSERTS没有WHERE条款!删除它。

INSERT INTO users 
(pseudo,email,naissancej,naissancem,naissancea,genre,fullname)
VALUES
(:pseudo,:email,:naissancej,:naissancem,:naissancea,:genre,:fullname)
ON DUPLICATE KEY UPDATE 
  pseudo=:pseudo2,
  email=:email2,
  naissancej=:naissanceJ2,
  naissancem=:naissanceM2,
  naissancea=:naissanceA2,
  genre=:genre2,
  fullname=:fullname2

答案 1 :(得分:0)

如果您查看 documentation ,最后会有WHERE条款并导致错误,请注意,您已经提到 ON DUPLICATE KEY UPDATE它将负责更新特定行。

fullname=:fullname2 WHERE id=5 

应该只是

fullname=:fullname2