循环PHP里面的SQL语句

时间:2016-10-27 08:53:08

标签: php sql loops while-loop

我试图在while循环中运行一个SQL语句,使用前一个语句中设置的变量$ id,但我正在努力让它工作。如果我在while循环中删除语句,我可以看到while循环正在运行,因为它多次显示$ id变量:

$businessPark = $_SESSION['businessPark'];
$num = "1";
$stmt = $conn->prepare("SELECT CompanyId from Portal.services WHERE ".$businessPark."  = ?");
$stmt->bind_param("s", $num);
$stmt->execute(); 
$stmt->bind_result($id);

while ($stmt->fetch()) {

    echo "ID: " . $id . "<br>";

}

然而,当我重新添加SQL语句时,我只会看到第一个$ id结果。如果我添加$ stmt-&gt; close();在while循环开始时,我获得了第一个公司名称,但是while循环结束了。这是代码:

$businessPark = $_SESSION['businessPark'];
$num = "1";
$stmt = $conn->prepare("SELECT CompanyId from Portal.services WHERE ".$businessPark."  = ?");
$stmt->bind_param("s", $num);
$stmt->execute(); 
$stmt->bind_result($id);

while ($stmt->fetch()) {

    $sql = $conn->prepare("SELECT CompanyName from phpipam.ipaddresses WHERE id = ?");
    $sql->bind_param("s", $id);
    $sql->execute(); 
    $sql->bind_result($CompanyName);
    $sql->fetch();
    echo $CompanyName;
}

有什么想法吗?

更新:如果我在循环之前添加商店结果并在循环内添加免费结果,我会获得第一个公司名称,并获得&#34;完成循环&#34;回声:

    $businessPark = $_SESSION['businessPark'];
$num = "1";
$stmt = $conn->prepare("SELECT CompanyId from Portal.services WHERE ".$businessPark."  = ?");
$stmt->bind_param("s", $num);
$stmt->execute(); 
$stmt->bind_result($id);
$stmt->store_result();
while ($stmt->fetch()) {
$stmt->free_result();
$sql = $conn->prepare("SELECT CompanyName from phpipam.ipaddresses WHERE id = ?");
$sql->bind_param("s", $id);
$sql->execute(); 
$sql->bind_result($CompanyName);
$sql->fetch();
echo $CompanyName;

}

echo "finished the loop";

}

感谢。

3 个答案:

答案 0 :(得分:1)

不能发表评论如此回答。

我认为您需要使用$stmt->bind_param("s", $num);代替uint8_t

答案 1 :(得分:0)

我在我的测试服务器上工作了(虽然有不同的查询) - 我很确定问题是你需要将结果集传递给PHP,以便你可以准备第二个语句(必须在循环之外) - 否则sql = $conn->prepare( ... );失败并返回false

应该工作:

$businessPark = $_SESSION['businessPark'];
$num = "1";

//first statement
$stmt = $conn->prepare("SELECT CompanyId from Portal.services WHERE ".$businessPark."  = ?");
$stmt->bind_param("s", $num);
$stmt->execute(); 
$stmt->bind_result($id);

//pass the result to PHP so you can prepare a new statement
$stmt->store_result();

//second statement
$sql = $conn->prepare("SELECT CompanyName from phpipam.ipaddresses WHERE id = ?");

while ($stmt->fetch()) {
    $sql->bind_param("s", $id);
    $sql->execute(); 
    $sql->bind_result($CompanyName);
    $sql->fetch();

    echo $CompanyName;
}

//clean up
$stmt->free_result();
$stmt->close();

答案 2 :(得分:0)

您可以通过加入完成所需的操作。我知道这并不能解释为什么你的代码不能正常工作,但我认为无论如何它都是一个更好的解决方案。

$businessPark = $_SESSION['businessPark'];
$num = "1";
$stmt = $conn->prepare("
SELECT t2.CompanyName
FROM Portal.services t1
INNER JOIN phpipam.ipaddresses t2 ON t1.CompanyId = t2.id
WHERE " . $businessPark . " = ?
");
$stmt->bind_param("s", $num);
$stmt->execute(); 
$stmt->bind_result($companyName);

有关join syntax

的更多信息