【发布时间】:2019-10-06 21:22:35
【问题描述】:
我正在尝试创建用户注册表单。但是,在本地机器上测试时,我得到一个错误:
SQLSTATE[23000]:违反完整性约束:1048 列“ID” 不能为空。
我在 AMPPS Apache、PHP 7.1 / MySQL 上运行它。我的操作系统是 macOS Mojave 10.4。我基本上已经尝试了以前答案中关于“违反完整性约束:1048”的所有建议,但仍然没有任何线索。 我希望有人能帮忙。感谢您的检查!
这里是php:
$event_owner_id=$_POST['event-owner-id'];
$event_owner_familyname=$_POST['event-owner-familyname'];
$event_owner_firstname=$_POST['event-owner-firstname'];
$event_owner_familyname_yomi=$_POST['event-owner-familyname-yomi'];
$event_owner_firstname_yomi=$_POST['event-owner-firstname-yomi'];
$event_owner_creditname=$_POST['event-owner-creditname'];
$event_owner_post=$_POST['event-owner-post'];
$event_owner_address=$_POST['event-owner-address'];
$event_owner_phone=$_POST['event-owner-phone'];
$event_owner_mail=$_POST['event-owner-mail'];
$event_owner_pass=$_POST['event-owner-pass'];
$event_owner_pass_kaku=$_POST['event-owner-pass-kaku'];
try {
$dsn = 'mysql:host=localhost;dbname=xxx;charset=utf8';
$pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
$sql = 'INSERT INTO User (ID, Type, LastName, FirstName, LastNameKana, FirstNameKana, Credit, PostCode, Address, PhoneNumber, eMailAddress, Password) VALUES (:ID, 002, :LastName, :FirstName, :LastNameKana, :FirstNameKana, :Credit, :PostCode, :Address, :PhoneNumber, :eMailAddress, :Password)';
$stmt=$pdo->prepare($sql);
$stmt -> bindParam(":ID", $event_owner_id, PDO::PARAM_STR);
$stmt -> bindParam(":LastName", $event_owner_familyname, PDO::PARAM_STR);
$stmt -> bindParam(":FirstName", $event_owner_firstname, PDO::PARAM_STR);
$stmt -> bindParam(":LastNameKana", $event_owner_familyname_yomi, PDO::PARAM_STR);
$stmt -> bindParam(":FirstNameKana", $event_owner_firstname_yomi, PDO::PARAM_STR);
$stmt -> bindParam(":Credit", $event_owner_creditname, PDO::PARAM_STR);
$stmt -> bindParam(":PostCode", $event_owner_post, PDO::PARAM_INT);
$stmt -> bindParam(":Address", $event_owner_address, PDO::PARAM_STR);
$stmt -> bindParam(":PhoneNumber", $event_owner_phone, PDO::PARAM_INT);
$stmt -> bindParam(":eMailAddress", $event_owner_mail, PDO::PARAM_STR);
$stmt -> bindParam(":Password", $event_owner_pass, PDO::PARAM_STR);
$stmt->execute();
}
catch (PDOException $e) {
echo $e->getMessage();
}
$pdo=null;
【问题讨论】:
-
嗯,
$event_owner_id是空的吗? -
这是什么
:ID, 002, -
添加
var_dump($_POST),看看event-owner-id有什么价值 -
永远不要存储纯文本密码!请使用 PHP 的built-in functions 来处理密码安全问题。如果您使用的 PHP 版本低于 5.5,您可以使用
password_hash()compatibility pack。 在散列之前不需要escape passwords 或对它们使用任何其他清理机制。这样做会更改密码并导致不必要的额外编码。
标签: php mysql sql insert bindparam