我开始编写一个简单的脚本,该脚本从CSV中读取ID,然后从CSV中为所有用户设置相同的电子邮件地址(在数据库中)。够简单...(使用PDO) 从CSV读取数据是可以的。这是更新的一部分,让我头痛。MySQL UPDATE返回值
$sSQL = "UPDATE users SET email = '[email protected]' WHERE CUSTOMER_ID = '%s'";
foreach ($aUsers as $sCustomerId) {
$sQuery = sprintf($sSQL, $sCustomerId);
if (!$db->exec($sQuery)) {
printf("There was an error updating user %s in database.<br>", $sCustomerId);
$aFailed[] = $sCustomerId;
} else {
printf("User %s successfully updated.<br>", $sCustomerId);
$success++;
}
}
脚本真的很容易。问题是如果mysql已经拥有该电子邮件地址,那么mysql不会更新数据库中的用户,因此它将返回0(0行受影响,这没关系)。如果在更新过程中发生错误,那么mysql也会返回同样的结果。这就是让我疯狂的原因。我如何区分“不受影响的行”和“发生错误”。我尝试使用不同的PDO :: ATTR_ERRMODE,并期待至少在错误的情况下,它会抛出一个异常(哪种PDO :: ERRMODE_EXCEPTION应该这样做),我可以比捕获,但它不会。然后我要使用
if ($db->exec($sQuery) === FALSE)
也不起作用。该脚本现在可行,但问题是我无法将“错误”与“无受影响的行”区分开来。
这是mysql中的新行为吗?因为我不记得写更新这样简单的脚本当具有过去那样的问题......
手册说:“如果你设置为它当前的值的列时,MySQL注意到这一点,并没有更新“。
您是否尝试过PDOStatement :: rowCount?它通过查询返回受影响的行。因此请检查它是否为0或更多:) – Refilon 2014-12-19 11:20:03
更新后应检查“$ db-> errorCode()”以查看是否发生错误 – 2014-12-19 11:21:31