【问题标题】:How to do two DB queries at once in PHP?如何在 PHP 中一次执行两个数据库查询?
【发布时间】:2014-05-05 00:06:26
【问题描述】:

我有两个查询,但我可以将它们作为一个查询

$sql = ("SELECT * FROM table WHERE title='$title' LIMIT 1");
$sql = ("UPDATE table SET views = views+1 where title='$title' ");
$query = mysql_query($sql) or die("Error Connecting To db");

目前第二个有效,但第一个无效。

【问题讨论】:

  • 您没有运行第一个查询。您正在覆盖$sql。将查询分配给字符串后尝试执行查询。
  • 您的第一个查询无效,因为 $sql 被第二个覆盖
  • 谢谢大家让我在这个帐户上提问的能力被禁止
  • @user3599634:不要把它当作个人。 Downvotes 只是一个信号,表明有人认为您的问题不适合该网站,或者它没有得到充分研究,或者其他一些问题。最近投反对票的增加也可能是be due to this - 即人们倾向于投反对票更多,以便总体上提高问题质量,以留住优秀的回答者。我相信你会明白,这是一个很难达到的平衡。

标签: php html mysql sql


【解决方案1】:

这是你的代码:

$sql = ("SELECT * FROM table WHERE title='$title' LIMIT 1");
$sql = ("UPDATE table SET views = views+1 where title='$title' ");
$query = mysql_query($sql) or die("Error Connecting To db");

首先,第一个$sql 将不会运行,因为您正在用下一行中的新内容覆盖第一个$sql 的内容。

然后看看你的逻辑,这是你的第一个查询:

SELECT * FROM table WHERE title='$title' LIMIT 1

我假设这是获得title 等于$title 的条目,仅此而已,对吧?但是你的下一个查询是这样的:

UPDATE table SET views = views+1 where title='$title'

无论如何,您正在更新 title='$title' 的值。所以甚至不需要第一个查询。所以问题解决了,对吧?那么您可能希望像这样将LIMIT 1 添加到第二个查询中:

UPDATE table SET views = views+1 where title='$title' LIMIT 1

但老实说,根据项目title 是否匹配来更新数据库的逻辑似乎很混乱。如果两个项目具有相同的标题怎么办?是的,您通过1 限制事物,但根据什么标准?如果您有三个具有相同标题的项目,哪个会更新?

您的应用结构需要更多差异化。但我认为这对于本质上是一个新手问题是公平的。

【讨论】:

  • 感谢您的帮助。我尝试按照您的建议使用更新行,但它无法正常工作,因为我在下面有一个 while 循环,只是将变量分配给数据库中的行?但我不确定。
  • @user3599634 好吧,知道代码的其余部分是什么会有所帮助。而且,既然您对被禁止感到不太高兴,请考虑一下:人们不会对您个人感到沮丧,但如果您不能提供基本细节,他们帮助您的能力就会受到阻碍。你不必是一个深科技来解释,“嘿,这行不通。我可以分享什么来向您展示我的所作所为以及我们如何解决这个问题。”这个社区是一个共同的努力,所以希望你能回来并责备如何再次成为它的一部分。
【解决方案2】:

分别运行两个查询

$sql1 = ("SELECT * FROM table WHERE title='$title' LIMIT 1");
$qry  = mysql_query($sql1);
if (mysql_num_rows($qry) > 0)
{
  while ($res = mysql_fetch_object($qry))
  {
  // -- contents --
  }


  $sql = ("UPDATE table SET views = views+1 where title='$title' ");
  $query = mysql_query($sql) or die("Error Connecting To db");
}

【讨论】:

    猜你喜欢
    • 2016-07-10
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多