我正在尝试使用for循环格式从数据库中获取数据但是循环是执行但是数据无法重试。
这是我的PHP代码
$resultss = array_unique($Employeeids);
// echo sizeof($resultss);
for($i = 0; $i<=sizeof( $resultss); $i++)
{
//echo $resultss[$i]. "<br>";
if($resultss[$i] !='')
{
$uniqueemp_id[$i]=$resultss[$i];
echo $uniqueemp_id[$i]."hi". "<br>";
$sql[$i]="Select Token From user Where Employeeid= '".$uniqueemp_id[$i]."'";
$result[$i]=mysqli_query($con,$sql[$i]);
echo $sql[$i];//upto here loop is executing correctly but while is not executing.
while($row = mysqli_fetch_assoc($result[$i]))
{
echo $tokens = $row['Token']. "<br>";
}
mysqli_close($con);
}
}
回声屏幕
我可以获取并显示员工ID 9的令牌,但无法显示员工ID 15的令牌,我无法找到错误,任何人都可以帮我解决此问题!
答案 0 :(得分:0)
您的核心问题是在第一次迭代结束时关闭连接(mysqli_close
)。将其移至至少在循环外部和下方。
这里有很多代码改进的机会。在我看到缺乏准备好的陈述之前,我会忽略它们。按顺序排列。
至少在提供的代码段中,不需要$i
。只需使用foreach,并清理随后对$i
的引用:
foreach ( $resultss as $empId ) {
样式方面,使用continue
为自己保留一些缩进。而不是
if($empId != '') {
...
使用:
if ( ! $empId )
continue;
...
除非您稍后需要$uniqueemp_id
,否则根本不使用它。坚持$empId
一般来说,养成使用绑定参数的预备语句的习惯。它是一种安全的东西,它是一种表现的东西,它是一种简单的东西,它是一种好习惯。就这么做。
准备单个查询,并多次执行,或使用IN
SQL运算符获取所有结果。单个准备好的查询多次执行:
$sql = 'SELECT token FROM user WHERE employeeid = ?';
$sth = mysqli_prepare($con, $sql); # "statement handle"
if ( ! $sth )
die('Unable to create prepared statement');
foreach ( $resultss as $empId ) {
...
mysqli_stmt_bind_param($sth, "s", $empId);
mysqli_stmt_execute( $sth );
$result = $sth->get_result();
while ($row = $result->fetch_assoc())
echo "Token: {$row['token']}<br>";
}
我将IN
操作员作为&#34;练习留给读者&#34;。