2015-04-02 49 views
-1

所以我使用PHP和PDO将数据插入到MySQL数据库,他们不应该。PHP和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。 没有为数据库中的表设置默认值。 无列的列被设置为在其各自列中需要唯一值。 NONE的列是外键。 所有的列被设置为空,仅仅是因为我的懒惰,因为我已经在INSERT过程中的这个点之前检查了空值。

为什么插件无法正常工作?我使用phpMyAdmin与数据库

+0

以防万一你感到困惑,在对代码的第2行中的echo语句,“非洲/阿比让”是$ TZ变量的内容。它们不是两个不同的变量。 – 2015-04-02 18:34:01

+0

另外,connectUserLogfiles();运作正常。我不仅将它用于包含在同一个php脚本文件中的其他PDO语句函数,甚至还有另一个PDO语句几乎完全像这样将不同的数据插入到此数据库的不同表中。 – 2015-04-02 18:36:27

+1

您在VALUES中使用UPDATE/SET语法。使用异常会抛出该语法错误。 – 2015-04-02 18:48:51

回答

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

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