我已成功将表格foo
中的多个字段复制到表格bar
。在删除原始记录之前,我想验证它是否已正确复制。
我尝试使用两个相同的SQL查询,将它们分配给变量,然后将变量与比较运算符(尝试==和===)进行比较,如下所示:
$sqlFoo = "SELECT `value` FROM `foo` WHERE `user` = '000';";
$sqlBar = "SELECT `value` FROM `bar` WHERE `user` = '000';";
$resultFoo = $db->query($sqlFoo);
$resultBar = $db->query($sqlBar);
If ($resultFoo == $resultBar) {
// Proceed
}
如果这不起作用,我在我的变量上使用了var_dump,它们都返回了:
object(mysqli_result)#2 (5) { ["current_field"]=> int(0) ["field_count"]=> int(16) ["lengths"]=> NULL ["num_rows"]=> int(0) ["type"]=> int(0) }
object(mysqli_result)#3 (5) { ["current_field"]=> int(0) ["field_count"]=> int(16) ["lengths"]=> NULL ["num_rows"]=> int(0) ["type"]=> int(0) }
显然我的方式不起作用。关于如何完成我想做的事情的任何建议?
答案 0 :(得分:0)
您无法使用===
运算符。
根据manual:
使用identity运算符(===)时,对象变量是相同的 当且仅当他们引用同一个类的同一个实例时。
因此,当你引用不同的实例时,会在你的情况下返回false
。
但是,您可以使用==
对它们进行比较,并为您提供所需的结果:
使用比较运算符(==)时,会比较对象变量 以一种简单的方式,即:两个对象实例是相等的 具有相同的属性和值,并且是相同的实例 类。
所以在你的情况下:
if ($sqlFoo_result_object === $sqlBar_result_object) {
// Proceed
}
关于==
运算符不适用于您的情况:您正在比较查询结果对象而不是文字字符串,对吧?如果你是,并且结果仍然是假的,你可能需要获取一行并比较行的结果而不是mysqli结果对象。
答案 1 :(得分:0)
我自己放弃用PHP编程,并在两个数据库上使用mysqldump然后只是区分这些转储。
e.g:
$ mysqldump -u root -p --skip-opt db_name foo >/tmp/foo
$ mysqldump -u root -p --skip-opt db_name bar >/tmp/bar
$ diff /tmp/foo /tmp/bar
以上显然假设你有一个unix环境并且你可以访问你的数据库(在这种情况下使用用户“root”,但任何具有读访问权限的用户都会这样做。)