PDO不会将UTF-8字符串插入数据库

时间:2019-11-12 09:10:21

标签: php mysql pdo utf-8

我试图将UTF-8字符插入数据库,但PDO根本不插入它们。 基本上,用户以表格形式输入信息,然后通过Ajax将其发送到PHP文件。通过Ajax进行数据传输可以正常工作,但是不能通过PHP将数据插入到我的数据库中。

我发现这是UTF-8问题,因为当我不尝试插入带重音符号的字符时,它们都可以很好地工作。当我执行utf8_encode($fname); utf8_encode($lname)时,它也起作用。如下所示,我为数据库连接定义了字符集,并且我尝试将字符串插入到的表是通过utf8_general_ci进行编码的。我已经尝试了在stackoverflow上找到的所有可能的解决方案,但均无效果。有人可以告诉我我在做什么错吗?

这是我的代码:

index.php

<html lang="en">
  <meta charset="utf-8">
     <form class="mx-1" method="POST" action="">
        <div class="form-group">
            <input type="text" class="form-control" name="rg-fname" id="rg-fname" aria-describedby="emailHelp" placeholder="Prénom">
        </div>
        <div class="form-group">
            <input type="text" class="form-control" name="rg-lname" id="rg-lname" aria-describedby="emailHelp" placeholder="Nom de famille">
        </div>
        <div class="form-group">
            <input type="email" class="form-control" name="rg-email" id="rg-email" aria-describedby="emailHelp" placeholder="E-mail">
        </div>
        <div class="form-group">
            <input type="password" class="form-control" name="rg-pw" id="rg-pw" placeholder="Mot de passe">
            <small class="form-text text-muted">Votre mot de passe est crypté et indécryptable.</small>
        </div>
        <small class="form-text text-muted mt-1">En vous inscrivant, vous vous engagez à respecter les termes et conditions.</small>
        <button class="btn btn-primary mt-2 w-100" id="btn-rg">Inscription</button>
        <button class="btn btn-secondary mt-2 w-100" id="switch-login">J'ai déjà un compte</button>
    </form>
    <script>
        $("#btn-rg").click(function(){
            event.preventDefault();
            var rgfname = $("#rg-fname").val();
            var rglname = $("#rg-lname").val();
            var rgemail = $("#rg-email").val();
            var rgpw = $("#rg-pw").val();
            $.ajax({
                method: "POST",
                url: "registration",
                data: 'rg-fname='+rgfname+'&rg-lname='+rglname+'&rg-email='+rgemail+'&rg-pw='+rgpw,
                success: function(status) {
                    $("#jQuery_log").html(status);
                    if(next == true)
                    {
                        //blabla
                    }
                    else
                    {
                        //blabla
                    }
                }
            })
        });
    </script>
</html>

registration.php

session_start();
$bdd = new PDO('mysql:host=localhost:8889;dbname=dbname;charset=utf8', 'blabla', 'blabla');

if(isset($_POST['rg-fname']) && isset($_POST['rg-lname']) && isset($_POST['rg-email']) && isset($_POST['rg-pw']))
{
    $fname = $_POST['rg-fname'];
    $lname = $_POST['rg-lname'];
    $email = $_POST['rg-email'];
    $pw = $_POST['rg-pw']; 

    if(preg_match("/^([\p{L}\- \s']+)$/ui", stripslashes($fname)))
    {
        $fname = ucfirst(strtolower($fname));
        if(preg_match("/^([\p{L}\- \s']+)$/ui", $lname))
        {
            $lname = ucfirst(strtolower($lname));
            if(filter_var($email, FILTER_VALIDATE_EMAIL))
            {
                if(preg_match('/^[A-Za-z0-9_~\-!@#\$%\^&*\(\)]+$/',$pw))
                {
                    if(strlen($pw) >= 4)
                    {
                        //blabla

                        if($exist == 0)
                        {   
                            function gen_uuid($len=8) 
                            {
                                $hex = md5(time() . uniqid("", true));
                                $pack = pack('H*', $hex);
                                $tmp =  base64_encode($pack);
                                $uid = preg_replace("#(*UTF8)[^A-Za-z0-9]#", "", $tmp);
                                $len = max(4, min(128, $len));
                                while (strlen($uid) < $len)
                                    $uid .= gen_uuid(22);
                                return substr($uid, 0, $len);
                            }
                            $tag = gen_uuid();
                            $default_grad = "background-image: linear-gradient(to top, #30cfd0 0%, #330867 100%)";

                            //data treatment
                        }
                    }
                }
            }
        }
    }
}

0 个答案:

没有答案