【问题标题】:update not working when using ON DUPLICATE KEY clause使用 ON DUPLICATE KEY 子句时更新不起作用
【发布时间】:2018-01-25 03:21:21
【问题描述】:

我在 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
    ));

【问题讨论】:

  • 你需要说出为什么这段代码不起作用的含义?
  • 错误 PDO ,语法不正确

标签: php mysql pdo on-duplicate-key


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    如果您查看 documentation,您在末尾有 WHERE 子句并导致错误,请注意,您已经提到 ON DUPLICATE KEY UPDATE 它将负责更新特定行。

    fullname=:fullname2 WHERE id=5 
    

    应该只是

    fullname=:fullname2
    

    【讨论】:

    • 更具体地说,不是你不需要,而是你这样做时出错。 ;)
    猜你喜欢
    • 1970-01-01
    • 2020-07-20
    • 2018-04-07
    • 1970-01-01
    • 2012-05-15
    • 2015-12-10
    • 2011-05-05
    • 2014-05-07
    • 1970-01-01
    相关资源
    最近更新 更多