Php Mysql pdo在两台服务器上的不同行为

Php Mysql pdo在两台服务器上的不同行为,php,mysql,pdo,prepared-statement,Php,Mysql,Pdo,Prepared Statement,为什么在第一台服务器上,更新集“00-00-00 00:00:00”和当前时间的第二台服务器上会出现这样的代码 $pdo = new PDO; $sth = $pdo->prepare("INSERT INTO `tbl_process` SET `good` = :good, `type` = :type, `pid` = :pid, `time` = :time ON DUPLICATE KEY U

为什么在第一台服务器上,更新集“00-00-00 00:00:00”和当前时间的第二台服务器上会出现这样的代码

$pdo = new PDO;
$sth = $pdo->prepare("INSERT INTO `tbl_process`
                      SET `good` = :good, `type` = :type, `pid` = :pid, `time` = :time
                      ON DUPLICATE KEY UPDATE `time` = :time");
$sth->bindParam(':good', $good);
$sth->bindParam(':type', $type);
$sth->bindParam(':pid', $pid);
$sth->bindParam(':time', $time);
$sth->execute();
如果我把代码改成这个(add:time2)-我在这两种情况下都得到了正确的时间

$pdo = new PDO;
$sth = $pdo->prepare("INSERT INTO `tbl_process`
                      SET `good` = :good, `type` = :type, `pid` = :pid, `time` = :time
                      ON DUPLICATE KEY UPDATE `time` = :time2");
$sth->bindParam(':good', $good);
$sth->bindParam(':type', $type);
$sth->bindParam(':pid', $pid);
$sth->bindParam(':time', $time);
$sth->bindParam(':time2', $time);
$sth->execute();

PDO有三种错误处理模式

PDO::ERRMODE_SILENT就像mysql_*一样,您必须检查每个结果,然后查看$db->errorInfo();以获取错误详细信息。 PDO::ERRMODE_警告抛出PHP警告 PDO::ERRMODE_异常引发PDO异常。在我看来,这是你应该使用的模式。它的行为非常像死亡(mysql_error());当它没有被捕获,但与or die()不同时,如果您选择这样做,则可以捕获并优雅地处理PDO异常

获取最后一个插入Id

<?php
$result = mysql_query("INSERT INTO table(firstname, lastname) VALUES('John', 'Doe')") or die("Insert Failed ".mysql_error());
$insert_id = mysql_insert_id();

占位符在查询中必须是唯一的。您不允许重复使用它们:

  SET `good` = :good, `type` = :type, `pid` = :pid, `time` = :time
                                                             ^^^^^
  ON DUPLICATE KEY UPDATE `time` = :time");
                                    ^^^^^

第二个查询有效,因为您使用了不同的占位符名称。

是否启用了仿真<代码>在准备好的语句中不能多次使用相同名称的命名参数标记,除非启用了仿真模式。
-确保将PDO配置为引发有用的异常。默认情况下,除了初始连接之外,它会自动出错。请参阅:。这没有回答问题,根据最后一句,它也不完整。OP正在使用
PDO
,为什么要返回
mysql
?这也与OP的问题无关。你没有认真阅读问题,你有没有尝试过这个解决方案?您使用了占位符,这是不允许的。