1

所以,我正在使用 usercake(用于用户管理的开源 php mysql 组合)。无论如何,我已经安装了它并且工作正常没有问题。由于我希望我的注册不包括显示名和用户名,我已经在所有代码中删除了显示名,这包括 mysqldb 以及在 vanilla 安装中调用或使用它的任何其他地方。我的老用户仍然可以正常登录和运行,但是在注册新用户时出现错误我无法弄清楚(我对 mysql/php 还很陌生,所以我希望这里有人可以帮助我解释我的日志文件为这是我第一次需要参考它们)首先这里是实际准备数据/插入 mysql 的代码(所有转义和清理都省略了)

  $stmt = $mysqli->prepare("INSERT INTO ".$db_table_prefix."users (
          user_name,
          password,
          email,
          activation_token,
          last_activation_request,
          lost_password_request, 
          active,
          title,
          sign_up_stamp,
          last_sign_in_stamp
          )
          VALUES (
          ?,
          ?,
          ?,
          ?,
          '".time()."',
          '0',
          ?,
          'New Member',
          '".time()."',
          '0'
          )");

 $stmt->bind_param("sssssi", $this->username, $secure_pass, $this->clean_email, $this->activation_token, $this->user_active);
         $stmt->execute();
         $inserted_id = $mysqli->insert_id;
         $stmt->close();

 //Insert default permission into matches table
 $stmt = $mysqli->prepare("INSERT INTO ".$db_table_prefix."user_permission_matches  (
        user_id,
        permission_id
        )
        VALUES (
        ?,
        '1'
        )");
 $stmt->bind_param("s", $inserted_id);
 $stmt->execute();
 $stmt->close();

所以我认为上面的所有内容(关键字)现在都很好,这里是调用上述代码时的日志 mysql 日志文件

           65 Prepare   INSERT INTO uc_users (
                user_name,
                password,
                email,
                activation_token,
                last_activation_request,
                lost_password_request, 
                active,
                title,
                sign_up_stamp,
                last_sign_in_stamp
                )
                VALUES (
                ?,
                ?,
                ?,
                ?,
                '1365565745',
                '0',
                ?,
                'New Member',
                '1365565745',
                '0'
                )
       65 Close stmt    
       65 Prepare   INSERT INTO uc_user_permission_matches  (
                user_id,
                permission_id
                )
                VALUES (
                ?,
                '1'
                )
       65 Execute   INSERT INTO uc_user_permission_matches  (
                user_id,
                permission_id
                )
                VALUES (
                '0',
                '1'
                )

现在有两件事我不明白上面发布的所有内容,第一件事和更相关的是为什么Execute INSERT INTO uc_user (...永远不会被调用?其次,为什么其余代码会执行(并以某种方式将 user_id 插入 uc_user)并将其正确传递给uc_user_permision_matches?

第 2 部分对于更熟悉 UserCake 内部工作的任何人来说,这个值绑定到什么,sssssi因为我在其他地方找不到对它的引用?

4

1 回答 1

2

看起来问题是 MySQL 拒绝插入查询INSERT INTO uc_user_permission_matches,因为 user_id 是 0,这让我相信之前的查询没有正确完成。

看起来在您的第一个查询中有 5 个占位符,但您尝试绑定 6 个,试试这个:

// Remove one of the s placeholders 
$stmt->bind_param("ssssi", $this->username, $secure_pass, $this->clean_email, $this->activation_token, $this->user_active);
于 2013-04-11T00:51:36.403 回答