嵌套MySQLI查询

时间:2014-04-01 08:07:57

标签: php mysql sql mysqli

我试图从数据库中的一个表中提取一个数字,然后使用该数字处理同一数据库中另一个表的查询。

代码不会吐出任何错误 - 它只是不返回字符串!我试图了解mysqli和整个数组结构,但我很难弄清楚为什么这不起作用。我相信我试图成功地将原始数组转换为字符串,以便在第二个查询中使用,我也将其转换为echo的字符串。只是因为某些原因它不打印任何东西!如果我取出嵌套循环然后打印active_event数就好了。我不知所措!

<?php
$DBServer = 'localhost';
$DBUser   = 'user';
$DBPass   = 'pass';
$DBName   = 'database';
$conn = new mysqli($DBServer, $DBUser, $DBPass, $DBName);
if ($conn->connect_error) {
trigger_error('Database connection failed: '  . $conn->connect_error, E_USER_ERROR);
}
$get_active_event = mysqli_query($conn, "SELECT active_event FROM asp_config");
while($active_event = @mysql_fetch_assoc($get_active_event)){
$get_event_name = mysqli_query($conn, "SELECT * FROM asp_events WHERE id = {$active_event['active_event']}"); echo $get_event_name->fetch_object()->event_name;}
$conn->close();
?>

谢谢!

-Philip

2 个答案:

答案 0 :(得分:1)

我建议您更改代码的逻辑,以更有效的方式修改数据库模式。

我在单个查询中获取结果,连接两个表asp_config和asp_events,或者更好的是,如果可能的话,除去asp_config并在asp_events表中添加一个列is_active或类似的东西。

然后你只需要在没有第二个查询的情况下循环使用while循环,因为你需要知道的只是在第一个结果集中。 小心使用需要的错误抑制(@)来了解是否存在错误并进行处理。抑制而不知道这是一个糟糕的实践

答案 1 :(得分:0)

不幸的是,加入这两个表并不是一个选项,我还有其他需要使用相同类型功能的查询,因此将所有表合并为一个表是不可行的。这一切都说,我确实搞清楚了。我认为最大的问题是在尝试插入PHP变量之前我没有退出SQL模式,所以我最终查询返回空白数据集的空行。我使用的最终代码是:

<?php
$DBServer = 'localhost';
$DBUser   = 'user';
$DBPass   = 'pass';
$DBName   = 'actionsports';
$con = new mysqli($DBServer, $DBUser, $DBPass, $DBName);
if ($con->connect_error) {
trigger_error('Database connection failed: '  . $con->connect_error, E_USER_ERROR);
}

$get_active_event = mysqli_query($con,"SELECT * FROM asp_config");
while($active_event = mysqli_fetch_array($get_active_event))
{
$get_event_name = mysqli_query($con, "SELECT * FROM asp_events WHERE id=('" .$active_event['active_event'] ."')");
if ($get_active_event === false) {
exit("Error: " . mysqli_error($con));
}
while($event_name = mysqli_fetch_array($get_event_name))
  {    echo $event_name['event_name'] ;}}
$con->close();
?>

在这种情况下,我在另一个循环中有一个查询循环,它确实返回正确的数据。它可能不是最漂亮的代码,但它起作用并且是我的情况所需要的。

感谢您的帮助!