【发布时间】: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;
}
}
?>
再次,我正在尝试从 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;
【问题讨论】:
-
旁注好奇:这与您之前发布的其他问题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。