【问题标题】:How to use a $result variable with table object in SQL query using mySQLi如何在使用 mySQLi 的 SQL 查询中将 $result 变量与表对象一起使用
【发布时间】:2016-08-26 09:17:14
【问题描述】:

我正在尝试使这段代码工作,但它只能在第二个 echo 语句 echo "Finished 2"; 之前工作。

<?php
if (count($_GET) > 0){
$sql = "SELECT * FROM winery WHERE winery_name='".$_GET['winery_name']."'";
echo "Finished 1";
$result = $db->query($sql);
echo "Finished 2";
$sql = "SELECT * FROM".$result."WHERE wine_type='".$_GET['wine_type']."'";
echo "Finished 3";
$result = $db->query($sql);
echo "Finished 4";
$sql = "SELECT * FROM".$result.", wine_variety WHERE wine_id=wine_variety.wine_id";
echo "Finished 5";
$result = $db->query($sql);
echo "Finished 6";
$sql = "SELECT * FROM".$result."WHERE variety_id='".$_GET['grape_variety']."'";
echo "Finished 7";
$result = $db->query($sql);
echo "Finished all queries";

}
?>

据我了解的问题是sql不将$result识别为表,但$result存储了我查询的返回表。如何让 SQL 在新查询中使用来自$result 的返回表?

【问题讨论】:

  • 从您的 DB 类中查看 query() 方法代码会很有用
  • 我正在使用 mysqli。我没有定义 query()。
  • 我认为您错过了$result 的要点。
  • 在这种情况下,$result 是一个 MYSQLI::Result 对象。您必须从该结果集中读取要使用的任何列,您不能只使用 $result,因为您使用 SELECT * 将返回多个列
  • 我知道在 sql 中可能无法做到这一点——在下一个查询中使用返回表。我只使用过关系代数,它在纸上有效,所以我想我必须加入表并在 sql 中创建一个新表并将其用于新查询?

标签: php html mysql sql mysqli


【解决方案1】:

我认为您正在从您的酒厂表中获取其他表名???

如果是这样,您需要从 $result 中获取行,然后从酒厂表中获取适当的列(即具有其他表名的列)。

顺便说一句,最好的选择是连接两个表。

还有一点我认为你犯了错误

$sql = "SELECT * FROM".$result."WHERE wine_type='".$_GET['wine_type']."'";

应该是

$sql = "SELECT * FROM ".$result." WHERE wine_type='".$_GET['wine_type']."'";

FROM 和双引号之间以及双引号和 WHERE 之间的空格

要从 winary_name 获取 winery_id,您可以编写 HTML 表单,如

<select name="winary_id">
    <option value="Winary ID HERE">Winary Name Here</option> // you can generate your dynamic options like this which will return id instead of name
</select>

【讨论】:

  • 你是对的。我的第一个说法是不正确的。应该是 $sql = "SELECT * FROM wine WHERE winery_name='".$_GET['winery_name']."'";
  • 谢谢它现在可以工作,但我意识到我需要做更多工作才能从 $_GET['winery_name'] 获取 winery_id 以使其按预期工作。
  • 从哪里得到 winery_name??
  • 你应该看看加入表格。并在一个查询中获取所有这些
  • 如果您是从表单中获取它并选择标签,那么您可以直接从那里获取 id
猜你喜欢
  • 2016-04-11
  • 1970-01-01
  • 2017-12-02
  • 2016-05-28
  • 1970-01-01
  • 2011-07-27
  • 1970-01-01
  • 1970-01-01
  • 2011-03-03
相关资源
最近更新 更多