I'm writing a registry form and wanna check if inserted data exists.
I wrote my own function to do that. This Function should check tables and if rows exist, return FALSE and if not exist then return TRUE and will insert the data to the tables.
I have 2 tables: 'users' and 'passwords'.
USERS(
user_id INT AUTO_INCREMENT,
user_login VARCHAR(30) NOT NULL,
user_email VARCHAR(255) NOT NULL,
join_date TIMESTAMP NOT NULL,
PRIMARY KEY - user_id
)
PASSWORDS(
password_id INT AUTO_INCREMENT,
user_id INT NOT NULL,
hash_password VARCHAR(255) NOT NULL,
PRIMARY KEY - password_id,
FOREIGN KEY - user_id REFERENCES USERS(user_id)
)
My SQL CODE:
CREATE FUNCTION `create_user`(`login` VARCHAR(30), `password` VARCHAR(255), `email` VARCHAR(255)) RETURNS BOOLEAN DETERMINISTIC NO SQL SQL SECURITY DEFINER BEGIN
IF (SELECT EXISTS(SELECT user_login,user_email FROM users WHERE user_login = login OR user_email = email LIMIT 1) OR (SELECT EXISTS(SELECT hash_password FROM passwords WHERE hash_password = password LIMIT 1)))
THEN
RETURN FALSE;
ELSE
INSERT INTO users(user_login,user_email)
VALUES(
login,
email
);
INSERT INTO passwords(user_id, hash_password)
VALUES(
(SELECT MAX(user_id) FROM users),
password
);
RETURN TRUE;
END IF;
END
MY PHP CODE:
public static function createUser($user,$password,$email,$DbDependency)
{
self::setDependency($DbDependency);
$query = "CALL create_user('$user','$password','$email')";
try
{
if(self::getDependency() -> query($query))
{
new UserManager($user,$password,$email);
header("Location: ../../Views/congratulations");
}
else
{
echo "bad";
}
}
catch(PDOException $error)
{
echo $error -> getMessage();
}
}
MySQL function 'create_user' should return FALSE if data exists OR TRUE if not exists,insert data to tables and PHP. IF function works then it should create a new userManager object and go to next page.
Instead of this page, it shows me "bad" and tables are still empty.