【问题标题】:How to use a MySQLi return object as a table for new SQL queries如何使用 MySQLi 返回对象作为新 SQL 查询的表
【发布时间】:2016-05-01 19:39:54
【问题描述】:

我不明白我们如何将来自SELECT 查询的表的结果用于新查询。假设我们使用INNER JOIN 连接两个表,我们得到一个mysqli return object,将连接表的行保存为一个数组。但是我如何将它用于新查询。我尝试通过使用结果对象 $result 作为 mysql 表来做到这一点,但它不起作用,做 $result->fetch_all() 也没有使它成为一个表。

我有一个表单,其中包含 $_GET['winery_name']$_GET['wine_type'],它们都是 winery 和 wine_type 表中的字符串。我需要从它们的字符串值转到它们的 id 值,它们是它们的主键并用作酒表中的外键。

根据 winery_name 和 wine_type,我必须过滤掉 wine 表并发布过滤结果。到目前为止,我的方法不起作用,我不明白如何使用连接表使其工作。到目前为止,这是我所拥有的:

  <?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";

$row = $result->fetch_object();
$wineryid = $row -> winery_id;
echo "Winery id is ".$wineryid;


$sql = "SELECT * FROM wine where wine.winery_id =".$wineryid;
$result1 = $db->query($sql);
echo "Finished 4";


$sql = "SELECT * FROM wine_type where wine_type='".$_GET['wine_type']."'";
echo "Finished 5";
$result = $db->query($sql);
echo "Finished 6";

$row = $result->fetch_object();
$winetypeid = $row -> wine_type_id;
echo "Wine type id is ".$winetypeid;
//code stops working here
$sql = "SELECT * FROM ".$result1." WHERE wine_type =".$winetypeid;
echo "Finished 8";
$result = $db->query($sql);
echo "Finished 9";

while($row = $result1->fetch_object()){

    echo $row->wine_name;
}

}
?>

这是 ER 图:

再次,我正在尝试从 winery 中的 winery_name(string) 到 winery_id(int) 和 wine_type 中的 wine_type(string) 到 wine_type_id(int)。然后使用 int 值从wine 表中过滤掉葡萄酒。 wine_type 也是 wine 中的 int 值,但 wine_type 中的字符串。

如果有办法使此声明生效,请告诉我:

$sql = "SELECT * FROM ".$result1." WHERE wine_type =".$winetypeid;

葡萄酒:

酒厂

wine_type

【问题讨论】:

  • 旁注好奇:这与您之前发布的其他问题stackoverflow.com/q/36968358 是否不同,或者这是不同的?它们看起来很相似。 (图形泄露了它)。 ;-)
  • 是的,它是不同的。那个是关于语法错误的,但是这个是关于如何使用返回对象作为 sql 中的表。
  • 检查code stops working here 点的错误。您也可以使用此代码进行 SQL 注入。使用参数化查询。
  • 如何使用mysqli以OO方式报错?我的 Mysqli 对象被称为 $db。
  • wine_type='".$_GET['wine_type']."' 是一个潜在的字符串,WHERE wine_type =".$winetypeid; 是另一个潜在的字符串,但使用“id”(int)。这里没有加起来。 php.net/manual/en/mysqli.error.php 并将其应用于您的所有查询和php.net/manual/en/function.error-reporting.php

标签: php mysql mysqli


【解决方案1】:

您无法在 Web 服务器上执行此操作。一旦查询结果从数据库传输到客户端服务器,数据库就会释放对查询结果的所有引用。

这可以通过嵌套的 select 语句来完成:

SELECT a, b FROM (
    SELECT a, b FROM c JOIN d ON a =e
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-17
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    相关资源
    最近更新 更多