2017-03-31 4 views
-3

私はエラーが発生するまでアプリケーションに取り組んでいますが、なぜこれが機能しないのか分かりません。本質的にコードは何かをデータベースに入れようとしていますやっていません。私はこのエラーを持っています。一般的なエラー:1366整数値が正しくありません

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'id' at row 1' in /Users/DannyTran/Desktop/WebServer/social-network/classes/DB.php:10 Stack trace: #0 /Users/DannyTran/Desktop/WebServer/social-network/classes/DB.php(10): PDOStatement->execute(Array) #1 /users/DannyTran/Desktop/WebServer/social-network/register.php(24): DB::query('INSERT INTO use...', Array) #2 {main} thrown in /Users/DannyTran/Desktop/WebServer/social-network/classes/DB.php on line 10

ここで私が持っているだろうコードは次のとおりです。
データベース:

CREATE TABLE `users` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
     `username` varchar(255) NOT NULL DEFAULT '', 
     `first_name` varchar(255) NOT NULL DEFAULT '', 
     `last_name` varchar(255) NOT NULL DEFAULT '', 
     `email` varchar(255) NOT NULL DEFAULT '', 
     `password` varchar(255) NOT NULL DEFAULT '', 
     `gender` varchar(11) NOT NULL DEFAULT '', 
     `country` varchar(255) NOT NULL DEFAULT '', 
     `verified` int(11) NOT NULL, 
     `role` varchar(255) NOT NULL DEFAULT '', 
     `bio` text, 
     `website` text, 
     `status` text, 
     `register` date NOT NULL, 
     `last` date NOT NULL, 
     `activated` int(11) DEFAULT NULL, 
     PRIMARY KEY (`id`) 
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

Register.php:

<?php 
    include('./classes/DB.php'); 
    $pdo = new PDO('mysql:host=127.0.0.1;DBname=socialnetwork;charset=utf8', 'root', 'password'); 
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    if(isset($_POST['register'])) { 
     $fn = strip_tags(@$_POST['fname']); 
     $ln = strip_tags(@$_POST['lname']); 
     $un = strip_tags(@$_POST['uname']); 
     $em = strip_tags(@$_POST['email']); 
     $pswd = strip_tags(@$_POST['password']); 
     $pswd2 = strip_tags(@$_POST['password2']); 
     $country = strip_tags(@$_POST['country']); 
     $gender = strip_tags(@$_POST['gender']); 
     $date = date("m-d-Y"); // Year - Month - Day 
     $no = 0; 
     $role = 'Member'; 
     $status = 'Hello world!'; 
     $website = ''; 
     $bio = ''; 



     DB::query('INSERT INTO users VALUES (\'\' , :username, :first_name, :last_name, :email, :password, :gender, :country, :verified, :role, :bio, :website, :status, :register, :last, :activated)', array(':username'=>$un,':first_name'=>$fn, ':last_name'=>$ln, ':email'=>$em, ':password'=>$pswd, ':gender'=>$gender, ':country'=>$country, ':verified'=>0, ':role'=>$role, ':bio'=>$bio, ':website'=>$website, ':status'=>$status, ':register'=>$date, ':last'=>$date, ':activated'=>0)); 
     echo "Welcome!"; 
    }; 

?> 




<h1>Register Now</h1> 
     <form action="#" method="post"> 
      <input type="text" placeholder="First Name" name="fname" required/><br /><br /> 
      <input type="text" placeholder="Last Name" name="lname" required/><br /><br /> 
      <input type="text" placeholder="Username" name="uname" required/><br /><br /> 
      <input type="email" placeholder="E-Mail Address" name="email" required/><br /><br /> 
      <input type="password" placeholder="Password" name="pswd" required/><br /><br /> 
      <input type="password" placeholder="Confirm Password" name="pswd2" required/><br /><br /> 
      <select name="gender"> 
       <option value="" disabled selected>Gender</option> 
       <option value="Male">Male</option> 
       <option value="Female">Female</option> 
       <option value="Other">Other</option> 
      </select><br /><br /> 
      <?php require_once './options/countries.php'; ?><br /><br /> 
      <input name="register" type="submit" value="Login" /><br /><br /> 
     </form> 
     <a href="login.php">Have an account? Login!</a> 

をdb.php:

<?php 


class DB { 
     private static function connect() { 
       $pdo = new PDO('mysql:host=127.0.0.1;dbname=socialnetwork;charset=utf8', 'root', 'password'); 
       $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
       return $pdo; 
     } 
     public static function query($query, $params = array()) { 
       $statement = self::connect()->prepare($query); 
       $statement->execute($params); 
       // $data = $statement->fetchAll(); 
       // return $data; 
     } 
    } 
?> 

私は臥uldは私が得ることができるどんな助けにも感謝します、ありがとう!

+0

5ページ幅のコード行を使用しないようにしてください。 –

+0

この問題はPHPとは関係ありません。それはあなたのMySQLのクエリに問題です。将来的には、問題を特定の単一の技術に絞り込んでください。 –

+1

通常、列の指定に関して間違った型付きの値を挿入しようとしています。たとえば 'string'を' int'に挿入します。私はあなたのSQLをインデントすることをお勧めします - これはもっと読みやすいので、値の型と列の型を1つずつ比較します。 – butterFlyNick

答えて

1

エラーメッセージは何が間違っているかを示します。 idの整数値が''の行を挿入しようとしています。

これは無効です。

idとして有効な整数を指定するか、idを指定しないで自動インクリメント機能を使用するかのいずれかを指定します。欠点は、各列に名前を付ける必要があることです。に値を提供したいとします。

the MySQL documentation on INSERTを読んで使い方を調べてください。

関連する問題