在mysql DB中插入php数组 - 语法正确,不插入值

时间:2014-03-16 01:51:45

标签: php mysql insert

我已经编写了这段代码,应该在我的数据库中插入一些事件数据,但是它没有在数据库中插入一个东西,你能告诉我为什么吗?

try {
    $pdo = new PDO("mysql:host={$dbhost};dbname={$dbname}", $dbuser, $dbpass);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

}
catch( PDOException $excepiton ) {
    echo "Connection error :" . $excepiton->getMessage();
}




try{
    $sql = "INSERT INTO events_DB (event_id, event_end_time, event_location, event_name) VALUES (:event_id, :event_end_time, :event_location, :event_name) ON DUPLICATE KEY UPDATE event_id = :event_id, event_end_time = :event_end_time, event_location = :event_location, event_name = :event_name";

    $stm = $db->prepare($sql);
    $stm->execute(array(":event_id" => $event[id], ":event_end_time" => $event[end_time], ":event_location" => $event[location], ":event_name" => $event[name]));

}
catch ( PDOException $exception )
{
//  decomentati sa vedeti erorile
  echo "PDO error :" . $exception->getMessage();
}

由于

2 个答案:

答案 0 :(得分:1)

您发布的代码与您正在运行的代码不同,因为发布的代码会在分析时导致语法错误,并且从未实际运行。

然而,发生的事情是发送到prepare方法的SQL在某种程度上无效,因此返回并存储在$stm中的结果是布尔值(false)而不是有效语句宾语。仔细检查您的SQL(您可以尝试在另一个应用程序(如phpMyAdmin或通过mysql命令行程序)中运行它)以确保其有效性。您还可以添加一些错误处理来查找原因:

$stm = $db->prepare($sql);
if (!$stm) {
 die($db->errorInfo());
}

修改:您已修改已发布的源代码,该代码现在显示了异常处理的使用。但是,您已注释掉了回显异常消息的行。此信息将有助于告诉您导致错误情况的原因。取消注释以查看消息(这很可能会通知您SQL无效以及哪个部分导致错误)。

答案 1 :(得分:0)

尝试从第一行删除<br>标记,而"正在混乱

$sql = "INSERT INTO events_DB (event_id, event_end_time, event_location, event_name);"