我有一个登录系统但我不知道为什么如果字符串长度大于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");
}
?>
答案 0 :(得分:2)
除非启用strict SQL mode,否则MySQL会将字符插入列的最大长度。来自the documentation:
如果未启用严格SQL模式,并且您为CHAR或VARCHAR列分配的值超出了列的最大长度,则会截断该值以使其适合并生成警告。对于非空格字符的截断,可以导致发生错误(而不是警告),并通过使用严格的SQL模式来禁止插入值。请参见第5.1.8节“服务器SQL模式”。
如果希望数据库强制执行此最大长度,则需要启用严格SQL模式。否则(或者也),您需要验证应用程序的长度。
请记住,如果您执行启用严格SQL模式,则会产生其他潜在影响,因为它是严格的。