我是php / sql的新手,但在我决定寻求帮助之前,我做了很多研究。
基本上我试图在MySQL5 DB中插入新的用户名/电子邮件/密码/ salt。这是我的测试register.php,只有一个回声:
include 'dbcxn.php';
$usr = $_POST['user'];
$mail = $_POST['mail'];
$pwd = $_POST['p'];
$random_salt = hash('sha512', uniqid(mt_rand(1, mt_getrandmax()), true));
$password = hash('sha512', $pwd.$random_salt);
$insert_stmt = DB::cxn()->prepare("INSERT INTO members (username, email, password, salt) VALUES ($usr, $mail, $password, $random_salt)");
echo $insert_stmt->param_count." parameters\n";
我尝试使用“$ insert_stmt = $ mysqli-> prepare”,同样的事情发生了。所以我创建了DB类。这是我的dbcxn.php,如果它有帮助:
define("HOST", "");
define("USER", "");
define("PASSWORD", "");
define("DATABASE", "");
define("PORT", "");
$mysqli = new mysqli(HOST, USER, PASSWORD, DATABASE, PORT);
class DB {
private static $mysqls;
private function __construct(){}
static function cxn() {
if( !self::$mysqls ) {
self::$mysqls = new mysqli(HOST, USER, PASSWORD, DATABASE, PORT);
}
return self::$mysqls;
}
}
不知道还有什么可以尝试,需要睡一觉:)。提前感谢任何建议。
答案 0 :(得分:1)
你的主要问题是你的字符串根本没有被转义。
mysqli :: prepare()用于准备好的查询。为了使此工作成功,您应该将查询更改为:
$insert_stmt = DB::cxn()->prepare("INSERT INTO members (username, email, password, salt) VALUES (?, ?, ?, ?)");
$insert_stmt->bind_param('ssss', $usr, $mail, $password, $random_salt);
$insert_stmt->execute();
您可以在http://www.php.net/manual/en/mysqli-stmt.bind-param.php上阅读bind_param以获取更多信息,并解释第一个参数('s'表示字符串值,此处有4个,因为您插入了4个字符串值)。
答案 1 :(得分:0)
您的SQL有语法错误。你得到的是: INSERT INTO成员(用户名,电子邮件,密码,盐)VALUES(用户名,test @ test.test,mypassword,lkjlk21j3lkjsdclksdmfl3i4)
你可能想要这个:
INSERT INTO members (username, email, password, salt) VALUES (?, ?, ?, ?)