如果字符串长度大于设置的最大值,为什么要在数据库中输入数据

时间:2017-08-02 20:13:13

标签: php mysql database

我有一个登录系统但我不知道为什么如果字符串长度大于set varchar maximum,数据是否输入到数据库中。我在数据库中设置varchar(20),当我注册一个新帐户时,我输入超过20个字符的用户名字符串,插入前20个字符。

具体来说,accountOption.php文件不在根文档中,连接正常工作

这是动作功能:

    function registerAccount($username,$password,$email){
     global $db;

    $sql = "INSERT INTO users (username,password,email) VALUES (:username,:password,:email)"; 
    $stmt = $db->prepare($sql);
    $stmt->execute(array(':username' => $username,':password'=>$password,':email'=>$email));
    if ($stmt->rowCount() > 0){

           $_SESSION['loggedIn'] = $username;
    header("Location: ?page=loggedIn&message=Registered");

    }else {
         header("Location: ?page=register&message=Failed");
    }



}

这是form.php

        <?php 
if(isset($_GET['message'])){
    echo $_GET['message']."<br>";
}
?>
Please register:
<form action="?bpage=accountOptions&action=register&nonUI" method="post">

    Username: <input type="text" name="username"><br>
    Password: <input type="password" name="password"><br>
    Email: <input type="email" name="email"><br>  
    <br>
    <input type="submit"> 
</form>

connection.php

<?php 

    global $db;

            $userdb="yyy";
            $passworddb="xxx";


    try {
        $db=new PDO('mysql:host=localhost;dbname=dbname;',$userdb,$passworddb);

    }catch(Exception $ex){

        throw new Exception("Nu am reusit sa ne conectam la db");
    }


?>

1 个答案:

答案 0 :(得分:2)

除非启用strict SQL mode,否则MySQL会将字符插入列的最大长度。来自the documentation

  

如果未启用严格SQL模式,并且您为CHAR或VARCHAR列分配的值超出了列的最大长度,则会截断该值以使其适合并生成警告。对于非空格字符的截断,可以导致发生错误(而不是警告),并通过使用严格的SQL模式来禁止插入值。请参见第5.1.8节“服务器SQL模式”。

如果希望数据库强制执行此最大长度,则需要启用严格SQL模式。否则(或者也),您需要验证应用程序的长度。

请记住,如果您执行启用严格SQL模式,则会产生其他潜在影响,因为它是严格的。