我正在从数据库中提取一个“名称”和“ URL”(这是可行的),但是对提取的“ URL”执行ping操作很不幸。
<tbody>
<?php
require_once "config/config.php";
$sql = "SELECT * FROM deployments";
if($result = mysqli_query($link, $sql)){
if(mysqli_num_rows($result) > 0){
echo "<tr>";
echo "<th>Deployment</th>";
echo "<th>URL</th>";
echo "<th>Status</th>";
echo "</tr>";
while($row = mysqli_fetch_array($result)){
echo "<tr>";
echo "<td>" . $row['name'] . "</td>";
echo "<td>" . $row['url'] . "</td>";
if($socket =@ fsockopen($sql = "SELECT url FROM deployments", 80, $errno, $errstr)) {
echo "<td><span class='badge badge-success'>LIVE</span></td>";
fclose($socket);
}
else {
echo "<td><span class='badge badge-danger'>DOWN</span></td>";
}
echo "</tr>";
}
// Free result set
mysqli_free_result($result);
} else{
echo "No records matching your query were found.";
}
} else{
echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
}
?>
</tbody>
如果ping成功,则徽章位应显示“ LIVE”,如果无法执行ping,则显示“ DOWN”。
答案 0 :(得分:0)
我知道您正在尝试做什么,但是您只是在fsockopen函数中输入一个字符串,实际上并没有在该字符串中执行SQL。您已经在运行同一查询的结果循环,因此只需从行中选择URL值并将其插入。
更改此:
if($socket =@ fsockopen($sql = "SELECT url FROM deployments", 80, $errno, $errstr)) {
echo "<td><span class='badge badge-success'>LIVE</span></td>";
fclose($socket);
}
对此:
$url = $row['url'];
if($socket =@ fsockopen("'$url'", 80, $errno, $errstr)) {
echo "<td><span class='badge badge-success'>LIVE</span></td>";
fclose($socket);
}
或者:
$url = "'" . $row['url'] ."'";
if($socket =@ fsockopen($url, 80, $errno, $errstr)) {
echo "<td><span class='badge badge-success'>LIVE</span></td>";
fclose($socket);
}
答案 1 :(得分:0)
我正在从数据库中提取一个“名称”和“ URL”(这是可行的),但是对被提取的“ URL”执行ping操作很不幸。
这实际上不是这段代码在做什么:
$socket =@ fsockopen($sql = "SELECT url FROM deployments", 80, $errno, $errstr)
$socket
调用的结果分配给fsockopen
变量。@
,从而消除了由于以下原因而引发的错误$sql = "SELECT url FROM deployments"
未按照您认为的去做。该语句将字符串SELECT url FROM deployments
分配给变量$sql
。就这些。在函数 call 中使用它实际上会将赋值(在这种情况下为布尔值)传递给函数。$row['url']
传递给该函数。让我说清楚: 永远不要在代码中使用@。 从理论上讲,可以为消除错误提供理由,但实际上,从来没有见过这样的情况,这不仅仅是程序员懒惰和/或不了解代码的作用。