我有以下注册码,SEEMS正在工作,但实际上并没有将输入的信息插入我的表格。一切运行都没有出现错误,“echo'结束';”正在显示。
修改,更新代码: 现在得到这个错误
警告:mysqli_stmt :: bind_param():类型中的元素数 定义字符串与中的绑定变量数不匹配 第19行的C:\ xampp \ htdocs \ ppa \ test.php
这一行:
$insert_stmt->bind_param($email, $password, $random_salt, $user);
PHP:
<?php
include "includes/db_connect.php";
if (isset($_POST['email'], $_POST['p'])) {
$email = $_POST['email'];
//Default user perms
$perms = "user";
$password = hash('sha512', $_POST['p']); //Need to add JavaScript to hash password before it gets here
//Create random salt
$random_salt = hash('sha512', uniqid(mt_rand(1, getrandmax()), true));
//Create salted password
$password = hash('sha512', $password.$random_salt);
//Add insert to database script
//Use prepared statements!
if ($insert_stmt = $mysqli->prepare("INSERT INTO users (email, password, salt, perms) VALUES (?, ?, ?, ?)")) {
$insert_stmt->bind_param($email, $password, $random_salt, $perms);
$insert_stmt->execute();
}
echo "Email: ".$email."<br />";
echo "Password: ".$password."<br />";
echo "Random Salt: ".$random_salt."<br />";
echo "Permissions: ".$perms."<br />";
}
?>
这是我的db_connect.php页面
<?php
define("HOST", 'localhost');
define("USER", 'ppa_user');
define("PASSWORD", 'password');
define("DATABASE", 'ppa');
$mysqli = new mysqli(HOST, USER, PASSWORD, DATABASE);
if ($mysqli->connect_errno) {
//No database found, redirect to setup
$url = "http://".$_SERVER['HTTP_HOST'].'/ppa/setup.php';
header('Location: '.$url);
}
?>
答案 0 :(得分:1)
替换以下内容:
//Add insert to database script
//Use prepared statements!
if ($insert_stmt = $mysqli->prepare("INSERT INTO users (email, password, salt, perms) VALUES (?, ?, ?, ?)"));
$insert_stmt->bind_param('ssss', $_POST['email'], $password, $random_salt, $user);
//Execute the prepared query
$insert_stmt->execute();
echo "end";
使用:
//Add insert to database script
//Use prepared statements!
if ($insert_stmt = $mysqli->prepare("INSERT INTO users (email, password, salt, perms) VALUES (?, ?, ?, ?)")) {
$insert_stmt->bind_param($_POST['email'], $password, $random_salt, $user);
$insert_stmt->execute();
echo "end";
}
答案 1 :(得分:1)
检查这个
if ($insert_stmt = $mysqli->prepare("INSERT INTO users (email, password, salt, perms) VALUES (?, ?, ?, ?)"));
$insert_stmt->execute(array($_POST['email'], $password, $random_salt, $user));
答案 2 :(得分:1)
为了回答这个问题,得出结论OP需要使用以下代码:
$insert_stmt->bind_param("ssss", $email, $password, $random_salt, $perms);