所以,我正在使用usercake(开源php mysql组合进行用户管理)。无论如何我已经安装它并完美地工作没有问题。由于我希望我的注册不包括displayname和username我在所有代码中删除了displayname,这包括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
是什么,因为我在其他地方找不到对它的引用?
答案 0 :(得分: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);