PHP& MySQL:插入后,所有值都为零,但它们不应该是

时间:2015-04-02 18:28:30

标签: php mysql database pdo insert

所以我正在使用PHP和PDO将数据插入MySQL数据库。

function addLog($id, $wd, $m, $md, $t, $tz, $y, $ilp, $igp)
{
    echo "|2|$wd/$m/$md/$t/$tz/$y/$ilp/$igp|";
    $connection = connectUserLogfiles();
    try
    {
        $sql = "INSERT INTO `log_meta` (`log_id`, `weekday`, `month`, `month_day`, `time`, `time_zone`, `year`, `inside_local_ip`, `inside_global_ip`) VALUES (log_id=:log_id, weekday=:weekday, month=:month, month_day=:month_day, time=:time, time_zone=:time_zone, year=:year, inside_local_ip=:inside_local_ip, inside_global_ip=:inside_global_ip);";

        $stmt = $connection->prepare($sql);
        $stmt->bindParam(':log_id', $id, PDO::PARAM_STR);
        $stmt->bindParam(':weekday', $wd, PDO::PARAM_STR);
        $stmt->bindParam(':month', $m, PDO::PARAM_STR);
        $stmt->bindParam(':month_day', $md, PDO::PARAM_STR);
        $stmt->bindParam(':time', $t, PDO::PARAM_STR);
        $stmt->bindParam(':time_zone', $tz, PDO::PARAM_STR);
        $stmt->bindParam(':year', $y, PDO::PARAM_STR);
        $stmt->bindParam(':inside_local_ip', $ilp, PDO::PARAM_STR);
        $stmt->bindParam(':inside_global_ip', $igp, PDO::PARAM_STR);
        $stmt->execute();
        $result = $stmt->rowCount();
        $stmt->closeCursor();

        return $result;
    } catch (Exception $ex) {
        $_SESSION['error'] = '<p>Error: something went wrong in addLog(), and we have absolutely no idea why. Sorry.</p>';
    }
}

echo语句的结果如下:

|1|Sun/Dec/31/12:12:12/Africa/Abidjan/2015/10.0.0.0/9.0.0.0|

此外,还会显示一条消息,指示通过$result变量在结果集中成功返回了一行。 (这发生在索引中,但我保证,在结果集中返回一行。)

我的问题是数据库表明插入行中的每个列值都为零。这也适用于主键,它不是自动递增的,因为通过使用PHP来处理这一点。 (缺少自动增量是因为该数据库与应用程序的关联以及该应用程序的运行方式。)

在执行该查询之后,用户被带到视图,该视图在用户输入数据时正确地显示所有相关信息。但是,这是基于用户输入的局部变量,而不是数据库。我觉得这样做是安全的,因为在那一点上,我确认用户输入是有效的,并且它已正确插入数据库。

我的主键log_id是INT数据类型。 所有其他数据类型都是VARCHAR。 没有为数据库中的表设置默认值。 没有列被设置为在各自的列中需要唯一值。 没有列是外键。 所有列都设置为可空,仅仅是因为我的懒惰,并且因为我已经在INSERT过程中检查此值之前的空值。

为什么插页无法正常工作?我使用PHPMyAdmin来操作数据库

1 个答案:

答案 0 :(得分:2)

从查询的VALUES (...)中删除列 -

$sql = "INSERT INTO `log_meta` (`log_id`, `weekday`, `month`, `month_day`, `time`, `time_zone`, `year`, `inside_local_ip`, `inside_global_ip`) VALUES (:log_id, :weekday, :month, :month_day, :time, :time_zone, :year, :inside_local_ip, :inside_global_ip);";

您已经在查询中定义了它们,并且由于等号和分号之间没有空格 - =:您的参数不被识别为参数。