目前我正在尝试PHP和MySQL的第一步。现在我想创建一个小型登录系统,为此我想用这个SQL查询/ PHP代码在我的数据库中插入一个用户:
include '../utils/utils.php';
if(isset($_POST['email']) && isset($_POST['pw']))
{
$email = $_POST['email'];
$pw = $_POST['pw'];
$mysqli = new mysqli(...); // Connect to database
$stmt = $mysqli->prepare("INSERT INTO User (Email, Password, Salt, Role) VALUES (?, ?, ?, ?)");
$userSalt = randomString(15); // siteSalt and randomString() is stored in utils.php
$saltedHash = hash('sha256', $pw . $siteSalt . $userSalt);
$stmt->bind_param('ssss', $email, $saltedHash, $userSalt, 'Normal');
if(!$stmt->execute()) die("Could not request data");
exit; // Send 200 OK
}
header("HTTP/1.1 401 Unauthorized");
exit; // Send 401 Unauthorized
但如果我在我的服务器上运行此脚本,它会在500 Internal Server Error
上与bind_param(...)
崩溃。你有什么想法吗?我找不到我的错误。所有的colums都很棒,如果我在PHP My Admin中使用一些示例数据运行SQL查询,那么它很有效。
编辑:角色是FK,但“正常”值可以。
答案 0 :(得分:2)
mysqli_stmt::bind_param
需要变量而不是文字。如果您首先将'Normal'
分配给变量,然后将该变量作为第五个参数传递给mysqli_stmt::bind_param
,那么它应该可以正常工作。
$tmp = 'Normal';
$stmt->bind_param('ssss', $email, $saltedHash, $userSalt, $tmp);