我似乎经常遇到这个问题,通常是为了检查我的数据库中是否实际存在$ _GET [' id'],然后再运行另一个查询,与收到的ID有关或不相关
如果存在具有相同ID的记录,则显示HTML,例如:
if ($r) { #query was successful
$num = mysqli_num_rows($r);
if ($num == 1) {
?>
<form method="post">
...
<input type="submit" value="Submit" />
</form>
<?php
} else {
echo 'No records';
}
} else {
echo 'Query Failed';
}
mysqli_free_result($r);
以上是有效的,但我们要说我想在我的开始/结束表格标签之间执行另一个无关的查询;简单地做这样的事情是否恰当,我认为这是一个嵌套查询:
$q = "SELECT id FROM stuff WHERE id = $id";
$r = @mysqli_query($dbc, $q);
if ($r) { #query was successful
$num = mysqli_num_rows($r);
if ($num == 1) {
?>
<form method="post">
<?php
$q = "SELECT example FROM somewhere";
$r = @mysqli_query($dbc, $q);
if ($r) {
$num = mysqli_num_rows($r);
if ($num > 0) {
while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
echo $row['example'];
}
}
} else {
echo 'Query failed';
}
?>
<input type="submit" value="Submit" />
</form>
<?php
} else {
echo 'No records';
}
} else {
echo 'Query Failed';
}
mysqli_free_result($r);
或者也许创建一个布尔值,如下所示:
$id_status = 0;
$q = "SELECT id FROM stuff WHERE id = $id";
$r = @mysqli_query($dbc, $q);
if ($r) { #query was successful
$num = mysqli_num_rows($r);
if ($num == 1) {
$id_status = 1;
}
}
mysqli_free_result($r);
if ($id_status) { #Run another query
...
}
当涉及到为一个任务需要两个单独的查询结果时,我当前遇到了问题:(1)从另一个表生成输入,(2)显示当前值,(3)检查以查看已生成的输入匹配当前值,例如:
$q = "SELECT id, food FROM restaurants";
$q = "SELECT favFood FROM people WHERE id = 1"; #favFood is equal to the id of food
...
while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
?>
#generate all food from table, make favFood the current selected input
<input type="radio" name="yum" value="<?php echo $row['id']; ?>" />
<?php
}
正如您所看到的,我遇到无关查询时遇到麻烦;最后一个例子可能适用于UNION或其他东西,但是我有一堆显示favFood的重复行,所以它感觉不对,例如:
favFood | id | food
1 | 1 | Pizza
1 | 2 | Burgers
1 | 3 | Monkey Brains
在我结束之前,我只是想说我尝试使用mysqli_multi_query,但我很可能做错了;我甚至不确定它是否会在这种情况下起作用,或者它究竟能起作用。
谢谢!
答案 0 :(得分:0)
如果你想在代码中多次检查记录是否存在,我建议创建一个返回bool的函数。
function record_exists($dbc, $q){
$state = false;
if($r = @mysqli_query($dbc, $q)){
if(mysqli_num_rows($r) == 1){
$state = true;
}
mysqli_free_result($r);
}
return $state;
}
$q = "SELECT id FROM stuff WHERE id = $id";
if(record_exists($dbc, $q)){
echo 'Yay, it exists';
}
然后,如果你想SELECT
表中的某些字段,但过滤器依赖于另一个表中的值,你可以JOIN
查询中的两个表,如下所示:
SELECT restaurants.id, restaurants.food
FROM restaurants
JOIN people ON restaurants.id = people.favFood
WHERE people.id = 1
现在,您只需要{table}来自餐馆餐馆的SELECT
字段,并将其过滤到桌上人员的个人ID中。
答案 1 :(得分:0)
你遇到这样一个问题的两个原因
您的数据库相关代码使用简单的mysqli包装器重写:
$rows = [];
$found = $db->getOne("SELECT id FROM stuff WHERE id = ?i", $id);
if ($found) {
$rows = $db->getAll("SELECT example FROM somewhere");
}
现在,您可以通过包含模板
来内联或(更好)继续HTML输出?>
<?php if ($rows): ?>
<form method="post">
<?php foreach ($rows as $row): ?>
<?=$row['example']?>
<?php endforeach ?>
<input type="submit" value="Submit" />
</form>
<?php else: ?>
No records
<?php endif ?>