【问题标题】:one php script, 2 queries, but 2nd one will not work一个 php 脚本,2 个查询,但第二个不起作用
【发布时间】:2012-11-29 23:00:29
【问题描述】:

这快把我逼疯了!! 我正在使用 php 将 table1 中的记录插入到 table3 中。然后 还将 table2 插入 table3。

但是,第二个插入不起作用。这是简单的版本:

if ($result = $mysqli->query("TRUNCATE TABLE table3")) {
   echo "TRUNCATE table3 ".$result;
}
if ($result = $mysqli->query("INSERT INTO table3 SELECT * FROM table1")) {
   echo "table1 inserted ".$result;
}
if ($result = $mysqli->query("INSERT INTO table3 SELECT * FROM table2")) {
   echo "table2 inserted ".$result;
}

没有错误等。 在上面的代码中,没有显示“插入的 table2”。

所以我这样做了:

$mysqli->query("TRUNCATE TABLE table3");
$mysqli->query("INSERT INTO table3 SELECT * FROM table1");
$mysqli->query("INSERT INTO table3 SELECT * FROM table2");

再次没有错误,但 table2 没有插入。

我用过:

printf("%s\n", $mysqli->info);
$mysqli->ping();

一切都很好,但我无法执行第二次插入。 为什么它不起作用是没有意义的。

感谢您的帮助,时间!

【问题讨论】:

  • 不要TRUNCATE TABLES - 这是残酷的,应该作为最后的手段。只需创建一个数据库并执行插入、更新和删除操作。请阅读有关 RDBMS 的内容
  • 第二个查询失败取决于 table2 的内容和结构,如果结构相同,您可能在主键/唯一键上有重复? [编辑]如果您向我们提供有关表格结构和内容的更多详细信息,我们应该能够对其进行整理。此外,在第二次插入失败后,您应该检查php.net/manual/en/mysqli.error.php 以了解发生了什么。
  • 请有人告诉我为什么要截断脚本中的表格。我只将其用作一次性活动 - 也就是非常罕见。
  • Ed -- 我截断是因为它更快而且不需要/理由保留任何东西(至少在我的情况下)

标签: mysql mysqli


【解决方案1】:

检查mysqli_error 以检索有关查询失败的信息。

【讨论】:

  • 我对它进行了错误检查,但不是正确的方法。我是这样添加的: if (!$mysqli->query("INSERT INTO table3 SELECT * FROM table2")) { printf("Errormessage: %s\n", $mysqli->error);并且它终于给了我我的问题---重复的键。我所有的表都是彼此的副本,主键是自动的....所以我取消了自动增量设置,它工作得很好!!!感谢安德里亚的提示/想法!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多