我一直在绞尽脑汁想弄清楚如何让它发挥作用。现在,我将在这里更好地解释它。
我想要做的是,当用户在表单中输入内容时,它会返回查询结果,然后使用该查询的结果,对它们执行另一个查询。我正在使用 PHP 和 oracle 数据库。
例如:目前我有一个充满食谱及其成分的数据库;我有一个用户可以输入成分的表格。在这个例子中,它是培根。
这工作得很好。但是,我难以实现的是当用户输入另一种成分时,当前表的结果在那里并进一步查询。假设我输入“奶酪”,所有包含培根和奶酪的食谱都会被查询和显示。
这个过程很容易在简单的 SQL 中实现,但是就像我看到的那样,我很难将它转移到使用表单。
现在,我知道解决方案是与临时表、动态 sql 或两者的组合有关。
预先感谢您对此事的任何帮助。
我的代码如下:
<?php
if(isset($_POST['submit']))
{
$name = $_POST['name'];
}
function do_fetch($myeid, $s)
{
print '<table border="1">';
while ($row = oci_fetch_array($s, OCI_RETURN_NULLS+OCI_ASSOC)) {
print '<tr>';
foreach ($row as $item) {
print '<td>'.($item?htmlentities($item):' ').'</td>';
}
print '</tr>';
}
print '</table>';
print '<br>';
}
// Create connection to Oracle
$c = oci_connect("system", "luigi98", "localhost/XE");
// Use bind variable
$query = "SELECT DISTINCT r.recipeTitle AS recipe
FROM RECIPES.recipe r
WHERE recipeID IN(
SELECT r.recipeID
FROM recipes.recipeIng il
INNER JOIN RECIPES.ingredient i ON il.ingredientID = i.ingredientID
WHERE il.recipeID = r.recipeID
AND i.ING = :eidbv)";
$s = oci_parse($c, $query);
$myeid = $name;
oci_bind_by_name($s, ":EIDBV", $myeid);
oci_execute($s);
do_fetch($myeid, $s);
// Close the Oracle connection
oci_close($c);
?>
<p>Enter ingredient</p>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input type="text" name="name"><br>
<input type="submit" name="submit" value="Search"><br>
</form>