Ich folge derzeit this tutorial die über die Erstellung einer API mit Slim. Also versuche ich ein Registersystem mit dem gleichen Code zu machen.Slim Micro Framework, warum kann ich den Datensatz nicht in die Datenbank einfügen?
Hier ist meine Funktion der Registerfunktion innerhalb DBHandler.php
public function createUser ($username,$email,$password){
require_once 'PassHash.php';
//check whether email exist or not
if(!$this->isUserEmailExisted($email)) {
//hash the password
$password_hash = PassHash::hash($password);
//generate api_key
$api_key = $this->generateApiKey();
//insert query
$stmt = $this->conn->prepare("INSERT INTO users(username,email,password_hash,api_key,status)VALUES(:username,:email,:password,:api_key,1)");
$stmt->bind_param("ssss",$username,$email,$password_hash,$api_key);
$result = $stmt->execute();
$stmt->close();
if ($result) {
return USER_CREATED_SUCCESSFULLY;
} else {
return USER_CREATE_FAILED;
}
} else{
return USER_ALREADY_EXISTED;
}
}
Ich überprüfe nur die Insert-Abfrage meine mal, aber ich weiß nicht, was das Problem dafür ist.
//insert query
$stmt = $this->conn->prepare("INSERT INTO users(username,email,password_hash,api_key,status)VALUES(:username,:email,:password,:api_key,1)");
$stmt->bind_param("ssss",$username,$email,$password_hash,$api_key);
Das Ergebnis ist immer die
{ "Fehler": true, "message": "Oops ist ein Fehler aufgetreten bei der Registrierung" }
Und meine Abfrageparameter ist
username = abc email = abc @ gm ail.com password = 123456
sollte dieses Ergebnis der erfolgreichen Registrierung erhalten. Aber es kommt vom Ergebnis des Fehlers, der erfolglos in die Datenbank einfügen. Hier
ist der Funktionsaufruf in meinem index.php
$app->post('/register', function() use ($app) {
// check for required params
verifyRequiredParams(array('username', 'email', 'password'));
$response = array();
// reading post params
$username = $app->request->post('username');
$email = $app->request->post('email');
$password = $app->request->post('password');
// validating email address
validateEmail($email);
$db = new DbHandler();
$res = $db->createUser($username, $email, $password);
if ($res == USER_CREATED_SUCCESSFULLY) {
$response["error"] = false;
$response["message"] = "You are successfully registered";
echoRespnse(201, $response);
} else if ($res == USER_CREATE_FAILED) {
$response["error"] = true;
$response["message"] = "Oops! An error occurred while registereing";
echoRespnse(200, $response);
} else if ($res == USER_ALREADY_EXISTED) {
$response["error"] = true;
$response["message"] = "Sorry, this email already existed";
echoRespnse(200, $response);
}
});
Hier meine Datenbank
CREATE TABLE `users` (
`id` int(11) NOT NULL,
`username` varchar(255) DEFAULT NULL,
`email` varchar(255) NOT NULL,
`password_hash` text NOT NULL,
`api_key` varchar(32) NOT NULL,
`status` int(1) NOT NULL DEFAULT '1',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='all user data ';
ist ich nur mein Bestes versuchen, alle erwarten zu überprüfen, und die Suche für alle Fragen zu Schlank , aber mein Wissen und meine Erfahrung sind immer noch sehr begrenzt, so dass ich immer noch nicht verstehe, was mein Fehler ist, jede Richtlinie wird sehr geschätzt.
Vielen Dank im Voraus.
Ich mache einen Versuch created_at
in der Abfrage enthalten sein und $status=1
und bind_param in der Aussage machen, aber der Ausgang ist immer noch der gleiche
// Generating API key
$api_key = $this->generateApiKey();
$status = 1;
// insert query
$stmt = $this->conn->prepare("INSERT INTO users(username, email, password_hash, api_key, status,created_at) values(?, ?, ?, ?, ?,NOW())");
$stmt->bind_param("sssss", $username, $email, $password_hash, $api_key,$status);
$result = $stmt->execute();
$stmt->close();
@Dusan Jovanov, ich eine Veränderung in meinem Code zu machen, kann Siehst du, mache ich richtig? Inside my createUser()
Methode
// Check for successful insertion
if ($result) {
// User successfully inserted
return USER_CREATED_SUCCESSFULLY;
} else {
$error = $stmt->error_list;
// Failed to create user
return $error;
}
} else {
// User with same email already existed in the db
return USER_ALREADY_EXISTED;
}
In '/ Register' Rückruf
else if ($res == $error) {
$response["error"] = true;
$response["message"] =$error;
echoRespnse(200, $response);
Bin ich tun, was Sie erwähnen ??
Weil ich diesen Fehler
Entschuldigung, weil ich noch neu in php..still Lernen ..Dank für Hilfe
Haben Sie versucht, einen Wert für 'created_at' anzugeben? Gemäß Ihrem Datenbankschema darf dieser Wert nicht null sein und Sie geben ihn nicht in Ihrer createUser-Funktion an. – mickdev
Ich mache die Änderungen, aber die Ausgabe immer noch gleich.I bei 'NOW()' und 'created_at' in der Abfrage.und' $ status = 1' statt 1 in der Abfrage – ken
den Wert von $ stmt ausgeben -> error' oder '$ stmt-> error_list' –