PHP从MySQLi数据表中提取URL

时间:2019-01-22 16:25:38

标签: php mysqli

我正在从数据库中提取一个“名称”和“ 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”。

2 个答案:

答案 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']传递给该函数。

让我说清楚: 永远不要在代码中使用@。 从理论上讲,可以为消除错误提供理由,但实际上,从来没有见过这样的情况,这不仅仅是程序员懒惰和/或不了解代码的作用。