为什么在第一台服务器上这样的代码在更新集“00-00-00 00:00:00”和2d设置当前时间
$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();
如果我将代码改为此(添加: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();
答案 0 :(得分:0)
占位符在查询中必须是唯一的。你不能重复使用它们:
SET `good` = :good, `type` = :type, `pid` = :pid, `time` = :time
^^^^^
ON DUPLICATE KEY UPDATE `time` = :time");
^^^^^
第二个查询有效,因为您使用了不同的占位符名称。
答案 1 :(得分:-3)
PDO有三种错误处理模式。
PDO :: ERRMODE_SILENT的行为类似于mysql_ *,您必须检查每个结果,然后查看$ db-> errorInfo();获取错误详细信息。 PDO :: ERRMODE_WARNING抛出PHP警告 PDO :: ERRMODE_EXCEPTION抛出PDOException。在我看来,这是你应该使用的模式。它的行为非常像或死(mysql_error());当它没有被捕获,但不像或死()时,如果您选择这样做,PDOException可以被优雅地捕获和处理。
获取上次插入ID
<?php
$result = mysql_query("INSERT INTO table(firstname, lastname) VALUES('John', 'Doe')") or die("Insert Failed ".mysql_error());
$insert_id = mysql_insert_id();
到目前为止,我们只展示了不接受任何变量的简单陈述。这些是简单的语句,PDO具有SELECT语句的快捷方法查询和INSERT,UPDATE,DELETE语句的exec。对于采用变量参数的语句,应使用绑定参数方法安全地执行查询。请考虑以下mysql_ *代码。