2017-08-02 43 views
2

我有一個登錄系統,但我不知道爲什麼數據輸入數據庫中,如果字符串長度大於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> 

the 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

這就是MySQL默認情況下的工作方式。 –

回答

2

除非啓用了strict SQL mode,否則MySQL將插入字符直到列的最大長度。從the documentation

如果沒有啓用嚴格的SQL模式,你一個值賦給一個CHAR或超過列的最大長度VARCHAR列,值被截斷,以適應併產生一個警告。要截斷非空格字符,可以導致發生錯誤(而不是警告),並通過嚴格的SQL模式禁止插入值。請參見第5.1.8節「服務器SQL模式」。

如果您希望數據庫執行此最大長度,則需要啓用嚴格SQL模式。否則(或者也可能),您需要驗證應用程序中的長度。

請記住,如果你啓用嚴格的SQL模式,將會有其他潛在的影響,因爲它是...嚴格。

相關問題