-1
if (!$errors) {
$salt = time();
$pwd = sha1($password . $salt); 
$mysqli = new mysqli('localhost','user','password','database');
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
exit(); 
}
$stmt = $mysqli->prepare("INSERT INTO users VALUES (?,?,?,?,?,?)");
$stmt->bind_param('ssssss',$username,$pwd,$lastloggedin,$role,$paswordchangedate,$salt);

这是我的代码片段,我数过无数次(在我的手指上也是..) - 连接有效,做了一个 var_dump($mysqli->error) 来得到错误。登录 Mysql 并描述表时,我得到 7 行

Field             Type         Null  Key  Default  Extra
id                 int(11)     No    Pri  Null     auto_increment
username           varchar(50) Yes   Uni  Null   
password           varchar(50) Yes        Null
lastloggedin       datetime    Yes        Null
role               varchar(20) Yes        Null
paswwordchangedate datetime    Yes        Null
salt               int(11)     Yes        Null
4

2 回答 2

0

将您的查询更改为:

$stmt = $mysqli->prepare("INSERT INTO users VALUES (null,?,?,?,?,?,?)");
$stmt->bind_param('ssssss',$username,$pwd,$lastloggedin,$role,$paswordchangedate,$salt);

注意我将第一个值添加Null到自动增量,您缺少 id 字段。

请记住,当您不指定字段名称时,您必须确保包含每个字段。

这也应该有效:

$query = "INSERT INTO users (username,password,lastloggedin,role,paswwordchangedate,salt)
          VALUES (?,?,?,?,?,?) ;";
于 2013-09-03T23:14:59.190 回答
0

另一种方法是使用如下INSERT ... SET ...格式:

$query = "
            INSERT INTO users
            SET
                username = ?,
                password = ?,
                lastloggedin = ?,
                role = ?,
                paswwordchangedate = ?,
                salt = ?
";
$stmt->bind_param('ssssss',$username,$pwd,$lastloggedin,$role,$paswordchangedate,$salt);

这样,根据MySQL 文档,子句中未列出的值SET将被分配为其默认值(null在您的id字段的情况下,由于该列的属性,它将被转换为整数auto_increment)。

请注意,此特定语法将允许您在需要时添加多个列,仅在语句中指定您真正需要的内容,INSERT并让其他列自动使用其默认值。

于 2013-09-04T00:00:01.840 回答