这是我在运行以下代码时收到的错误代码!
致命错误:未捕获PDOException:SQLSTATE [HY000]:常规错误:1364字段'点'在/var/www/html/public_html/register.php:18中没有默认值。堆栈跟踪:#0 /var/www/html/public_html/register.php(18):PDOStatement->执行(数组)在第18行的/var/www/html/public_html/register.php中抛出#1 {main}
以下是代码:
<?php
$dbConnection = new PDO('mysql:dbname=App;host=localhost;charset=utf8', '*', '*');
$dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
ini_set('display_errors', 1);
$email = "sexyi";
$username = "sexyi";
$password = "sexyi";
$response = array();
$hi = $dbConnection->prepare("SELECT * FROM user WHERE username = ? OR email = ?");
$hi->execute(array($username, $email));
$red = $hi->fetchAll(PDO::FETCH_ASSOC);
if (count($red) > 0){
$response["success"] = false;
}else{
$response["success"] = true;
$stmt = $dbConnection->prepare("INSERT INTO user (email, username, password) VALUES (?, ?, ?)");
$stmt->execute(array($email, $username, $password));
}
echo json_encode($response);
?>
答案 0 :(得分:2)
错误的最可能解释是表user
。这可能包括一个名为points
的列。并且该列声明为NOT NULL并且未指定DEFAULT值。 (当没有为列提供值时,MySQL将使用DEFAULT值。)
(如果表上有一个BEFORE INSERT触发器,那么它可能不是user
表,而是触发器中引用的其他一些表。)
要解决此问题,可以选择以下几种方法:
在INSERT中包含points
列,并提供值
INSERT INTO user (..., points) VALUES (..., '0')
更改表定义以允许points
的NULL值(删除NOT NULL约束)
ALTER TABLE CHANGE points points datatype COMMENT ''
更改表定义以指定DEFAULT值
ALTER TABLE CHANGE points points datatype NOT NULL DEFAULT '0' COMMENT 'foo'
(将datatype
替换为分配给该列的当前数据类型,无论是什么......例如INT
,DECIMAL(20,2)
,VARCHAR(40)