第18行的PHP PDO错误

时间:2017-05-01 02:00:45

标签: php mysql pdo

这是我在运行以下代码时收到的错误代码!

  

致命错误:未捕获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);
?>

1 个答案:

答案 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替换为分配给该列的当前数据类型,无论是什么......例如INTDECIMAL(20,2)VARCHAR(40)