PDO Insert不起作用,但其他是的

时间:2015-03-13 21:21:07

标签: php mysql pdo insert

我的INSERT PDO语句出现问题:

在同一个PHP页面中,我有第一个INSERT:

//Creation d'un entrainement
if (isset($_POST) && isset($_POST['intitule_ent']) && isset($_POST['start_ent'])) {
    if(get_magic_quotes_gpc()){
        $_POST['intitule_ent'] = stripslashes(trim($_POST['intitule_ent']));
    }

    $intitule = $_POST['intitule_ent'];

    if($i = $bdd->prepare("INSERT INTO entrainements (intitule_entrainement,id_membre) VALUES (:intitule_entrainement,:id_membre)")){
        $i->bindParam(':intitule_entrainement', $intitule);
        $i->bindParam(':id_membre', $user_id);
        $i->execute();
        echo '<span class="label label-success">Entrainement créé avec succès!</span>';
        $entrainement_commence = true;
    }
    else {
        echo '<span class="label label-danger">Erreur lors de la création de l\'entraînement.</span>';
    }
}

此INSERT效果很好!

但问题是这个INSERT不起作用:

//Verifications d'usage du formulaire et securite
if (isset($_POST['exm']) && isset($_POST['series']) && isset($_POST['repetitions']) && isset($_POST['valider'])) {

    //On securise les chaines de caracteres pour eviter les injections
    if(get_magic_quotes_gpc()){
        $_POST['repetitions'] = stripslashes(trim($_POST['repetitions']));
        $_POST['poids'] = stripslashes(trim($_POST['poids']));
        $_POST['temps'] = stripslashes(trim($_POST['temps']));
        $_POST['force'] = stripslashes(trim($_POST['force']));
        $_POST['vitesse'] = stripslashes(trim($_POST['vitesse']));
    }

    $id_exom = $_POST['exm'];
    $s = $_POST['series'];
    $r = $_POST['repetitions'];
    $p = $_POST['poids'];
    $t = $_POST['temps'];
    $f = $_POST['force'];
    $v = $_POST['vitesse'];


    if($i = $bdd->prepare("
        INSERT INTO exercices (id_entrainement,id_exercice_muscle,membre,series,reps,poids,temps,force_exo,vitesse)
        VALUES (:id_entrainement,:id_exercice_muscle,:membre,:series,:reps,:poids,:temps,:force_exo,:vitesse)")
        ){

        $i->bindParam(':id_entrainement', $id_ent_en_cours);
    $i->bindParam(':id_exercice_muscle', $id_exom);
    $i->bindParam(':membre', $user_id);
    $i->bindParam(':series', $s);
    $i->bindParam(':reps', $r);
    $i->bindParam(':poids', $p);
    $i->bindParam(':temps', $t);
    $i->bindParam(':force_exo', $f);
    $i->bindParam(':vitesse', $v);
    $i->execute();
    $envoi_succes = '<span class="label label-success">Enregistrement réalisé avec succès !</span>';
}
else {
    $envoi_erreur = '<span class="label label-warning">Erreur lors de l\'enregistrement de l\'exercice.</span>';
}

根据我的表架构,我真的不知道为什么它不起作用: My table schema

这是我的DB: enter image description here

我在这里给你的表格,但我觉得它不是很有用......:

<form name="envoi_exo" action="send.php" method="post">
    <input type="text" name="exm" disabled value="">
    <input type="text" name="series" disabled value="">
    <input type="text" name="repetitions" disabled value="">
    <input type="text" name="poids" disabled value="">
    <input type="text" name="temps" disabled value="">
    <input type="text" name="force" disabled value="">
    <input type="text" name="vitesse" disabled value="">
    <button type="submit" name="valider" class="btn btn-success">Enregistrer l\'exercice</button>
</form>

最后,我在StackOverflow上找到了关于PDO中INSERT问题的一些主题,我试图找到一个带有try catch(不推荐)的解决方案并打开我的MYSQL日志文件..这是最新的日志:

2015-03-13 21:36:01 6916 [Warning] InnoDB: Cannot open table phpmyadmin/pma_usergroups from the internal data dictionary of InnoDB though the .frm file for the table exists. See http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html for how you can resolve the problem. 2015-03-13 21:52:57 6916 [Warning] InnoDB: Cannot open table phpmyadmin/pma_usergroups from the internal data dictionary of InnoDB though the .frm file for the table exists. See http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html for how you can resolve the problem. 2015-03-13 21:52:57 6916 [Warning] InnoDB: Cannot open table phpmyadmin/pma_usergroups from the internal data dictionary of InnoDB though the .frm file for the table exists. See http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html for how you can resolve the problem.

我真的需要帮助来纠正这个问题,因为我一次又一次地搜索解决方案,我发现没有什么真正有用的......

当我点击发送表单的按钮时,会出现注释,页面只会重新加载(我认为它是动作属性),而且我看不到数据库中的插入内容。

1 个答案:

答案 0 :(得分:1)

您禁用了Web表单中的大多数输入字段,当您单击“提交”按钮时,脚本将尝试在数据库中插入空值。 但是,您的某些字段设置为NOT NULL(例如id_entrainement),您的插入语句将无法执行。

开头的isset()检查也应该失败:

if (isset($_POST['exm']) && isset($_POST['series']) && isset($_POST['repetitions']) && isset($_POST['valider'])) {