PHP bind_param崩溃,500内部服务器错误

时间:2015-09-19 21:06:25

标签: php mysql

目前我正在尝试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,但“正常”值可以。

1 个答案:

答案 0 :(得分:2)

对于除第一个参数之外的所有参数,

mysqli_stmt::bind_param需要变量而不是文字。如果您首先将'Normal'分配给变量,然后将该变量作为第五个参数传递给mysqli_stmt::bind_param,那么它应该可以正常工作。

$tmp = 'Normal';
$stmt->bind_param('ssss', $email, $saltedHash, $userSalt, $tmp);