2017-08-02 28 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モードが有効になることに注意してください。これは厳しいため、その他の潜在的な影響があります。

関連する問題