【问题标题】:PHP PDO error on line 18第 18 行的 PHP PDO 错误
【发布时间】:2017-05-01 02:00:45
【问题描述】:

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

致命错误:未捕获的 PDOException:SQLSTATE[HY000]:一般错误:1364 字段 'points' 在 /var/www/html/public_html/register.php:18 中没有默认值 堆栈跟踪:#0 / var/www/html/public_html/register.php(18): PDOStatement->execute(Array) #1 {main} 在第 18 行的 /var/www/html/public_html/register.php 中抛出

代码如下:

<?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);
?>

【问题讨论】:

标签: php mysql pdo


【解决方案1】:

该错误最可能的解释是表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 ''

  • 更改表定义以指定默认值

    ALTER TABLE CHANGE points points datatype NOT NULL DEFAULT '0' COMMENT 'foo'

(将datatype替换为分配给列的当前数据类型,无论是什么......例如INTDECIMAL(20,2)VARCHAR(40)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-29
  • 2015-07-31
  • 1970-01-01
  • 1970-01-01
  • 2015-04-06
  • 2014-05-24
  • 1970-01-01
相关资源
最近更新 更多