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
Post a Comment