php - User Register DB Issue -


so, script dump user info database using pdo driver. whenever run script unique username works , dumps info in. but, if user same username tries sign should throw error. i'm using $stmt->errorcode() == 23000 check duplicates in database whenever try , register username i've registered blank white screen. i've ran through script xdebug , looks when try , sign username that's in database it's not hitting if/else statements @ bottom of script. it's executing , throwing blank white screen.

edit: have username field in db set 'unique'.

video of xdebug walkthrough: http://screencast.com/t/znzfmgv2

any ideas?

// create salt using current timestamp $salt = time();  // encrypt password , salt $password = sha1($password.$salt);  // prepare sql statement $sql = 'insert users (created, username, salt, password) values(now(), :username, :salt, :password)'; $stmt = $conn->prepare($sql); // bind parameters $stmt->bindparam(':username', $username, pdo::param_str); $stmt->bindparam(':salt', $salt, pdo::param_int); $stmt->bindparam(':password', $password, pdo::param_str); $stmt->execute();  if ($stmt->rowcount() == 1) {     $registerresult = "$username has been registered. may log in."; } elseif ($stmt->errorcode() == 23000) {     $registerresult = "$username in use. please choose username."; } else {     $registerresult = 'sorry, there problem database'; } 

checking errorcodes not work, because duplicate error throw exception on call execute().

you need catch pdoexception :

try {     // create salt using current timestamp     $salt = time();      // encrypt password , salt     $password = sha1($password.$salt);      // prepare sql statement     $sql = 'insert users (created, username, salt, password) values(now(), :username, :salt, :password)';     $stmt = $conn->prepare($sql);     // bind parameters     $stmt->bindparam(':username', $username, pdo::param_str);     $stmt->bindparam(':salt', $salt, pdo::param_int);     $stmt->bindparam(':password', $password, pdo::param_str);     $stmt->execute();      if ($stmt->rowcount() == 1) {         $registerresult = "$username has been registered. may log in.";     } } catch (pdoexception $e) {     if ($stmt->errorcode() == 23000) {         $registerresult = "$username in use. please choose username.";     } else {         $registerresult = 'sorry, there problem database';     }     die($e->getmessage()); } 

make sure connection set throw exception of course:

$conn->setattribute( pdo::attr_errmode, pdo::errmode_exception ); 

Comments