【问题标题】:PHP & MySQL: Upon insert, all values are zero, but they shouldn't bePHP & MySQL:插入后,所有值都为零,但它们不应该为零
【发布时间】:2015-04-02 18:28:29
【问题描述】:

所以我使用 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>';
    }
}

回显语句的结果如下:

|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来操作数据库

【问题讨论】:

  • 以防你感到困惑,在代码第 2 行的 echo 语句中,'Africa/Abidjan' 是 $tz 变量的内容。它们不是两个不同的变量。
  • 还有,connectUserLogfiles();正常运行。我不仅将它用于同一个 php 脚本文件中包含的其他 PDO 语句函数,甚至还有另一个 PDO 语句几乎与这个几乎完全相同,它将不同的数据插入到该数据库的不同表中。
  • 您在 VALUES 中使用了 UPDATE/SET 语法。使用异常会引发语法错误。

标签: php mysql database pdo insert


【解决方案1】:

从查询的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);";

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

【讨论】:

    猜你喜欢
    • 2016-09-24
    • 1970-01-01
    • 2014-04-28
    • 2011-04-01
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多