Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的脚本一直在重新说明php函数?_Php_Mysql - Fatal编程技术网

为什么我的脚本一直在重新说明php函数?

为什么我的脚本一直在重新说明php函数?,php,mysql,Php,Mysql,我有下面的脚本,它基本上应该从我的MySQL表中获取字段,包括经度和纬度,并计算驾驶距离,然后作为列表回显给用户 出于某种原因,脚本只打印来自的第一个结果,然后抛出一个错误致命错误:无法重新声明GetDrivingDistance() 任何关于如何绕过此问题的建议都将受到高度赞赏。您的GetDrivingDistance函数位于循环内。在php中不能反复声明同名函数。这会导致你犯同样的错误 试试这个 mysqli_close($conn); $servername = "

我有下面的脚本,它基本上应该从我的MySQL表中获取字段,包括经度和纬度,并计算驾驶距离,然后作为列表回显给用户

出于某种原因,脚本只打印来自的第一个结果,然后抛出一个错误
致命错误:无法重新声明GetDrivingDistance()


任何关于如何绕过此问题的建议都将受到高度赞赏。

您的GetDrivingDistance函数位于循环内。在php中不能反复声明同名函数。这会导致你犯同样的错误

试试这个

mysqli_close($conn);            
$servername = "localhost";
$username = "user";
$password = "pwd";
$dbname = "buses";

 // Create connection
 $conn = new mysqli($servername, $username, $password, $dbname);
 // Check connection
   if ($conn->connect_error) {
 die("Connection failed: " . $conn->connect_error);
   } 
  $sql = "SELECT * 
                FROM matatus 
                JOIN registered_matatus
                ON matatus.user_id=registered_matatus.user_id 
                ORDER BY matatus.vehicle_id 
                ASC LIMIT 4";
  if ($result->num_rows > 0) {
 // output data of each row
 echo "CON Select a matatu\n";
 while($row = $result->fetch_assoc()) {
 //Start of  calculate distance and time
 $lat1 = "-1.283180";
$long1 = "36.822462";
$lat2 = $row["lat"];
$long2 = $row["lng"];


$dist = GetDrivingDistance($lat1, $lat2, $long1, $long2);
$distance = $dist['distance'];
$time = $dist['time'];
//End of calculate distance and time
     echo "". $row["id"]. " ". $row["reg_number"]. " (" . $row["sacco"] . ")         -$time\n";
 }
} else {
  echo "0 results";
}


function GetDrivingDistance($lat1, $lat2, $long1, $long2)
{
$url = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=".$lat1.",".$long1."&destinations=".$lat2.",".$long2."&mode=driving&language=pl-PL";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($ch);
curl_close($ch);
$response_a = json_decode($response, true);
$dist = $response_a['rows'][0]['elements'][0]['distance']['text'];
$time = $response_a['rows'][0]['elements'][0]['duration']['text'];
return array('distance' => $dist, 'time' => $time);
 }
 $conn->close();

GetDrivingDistance函数位于循环内。在php中不能反复声明同名函数。这会导致你犯同样的错误

试试这个

mysqli_close($conn);            
$servername = "localhost";
$username = "user";
$password = "pwd";
$dbname = "buses";

 // Create connection
 $conn = new mysqli($servername, $username, $password, $dbname);
 // Check connection
   if ($conn->connect_error) {
 die("Connection failed: " . $conn->connect_error);
   } 
  $sql = "SELECT * 
                FROM matatus 
                JOIN registered_matatus
                ON matatus.user_id=registered_matatus.user_id 
                ORDER BY matatus.vehicle_id 
                ASC LIMIT 4";
  if ($result->num_rows > 0) {
 // output data of each row
 echo "CON Select a matatu\n";
 while($row = $result->fetch_assoc()) {
 //Start of  calculate distance and time
 $lat1 = "-1.283180";
$long1 = "36.822462";
$lat2 = $row["lat"];
$long2 = $row["lng"];


$dist = GetDrivingDistance($lat1, $lat2, $long1, $long2);
$distance = $dist['distance'];
$time = $dist['time'];
//End of calculate distance and time
     echo "". $row["id"]. " ". $row["reg_number"]. " (" . $row["sacco"] . ")         -$time\n";
 }
} else {
  echo "0 results";
}


function GetDrivingDistance($lat1, $lat2, $long1, $long2)
{
$url = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=".$lat1.",".$long1."&destinations=".$lat2.",".$long2."&mode=driving&language=pl-PL";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($ch);
curl_close($ch);
$response_a = json_decode($response, true);
$dist = $response_a['rows'][0]['elements'][0]['distance']['text'];
$time = $response_a['rows'][0]['elements'][0]['duration']['text'];
return array('distance' => $dist, 'time' => $time);
 }
 $conn->close();
试试这个:
不能在循环中声明函数

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
     die("Connection failed: " . $conn->connect_error);
} 
$sql = "SELECT * 
                    FROM matatus 
                    JOIN registered_matatus
                    ON matatus.user_id=registered_matatus.user_id 
                    ORDER BY matatus.vehicle_id 
                    ASC LIMIT 4";
if ($result->num_rows > 0) {
     // output data of each row
     echo "CON Select a matatu\n";

function GetDrivingDistance($lat1, $lat2, $long1, $long2)
{
    $url = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=".$lat1.",".$long1."&destinations=".$lat2.",".$long2."&mode=driving&language=pl-PL";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    $response = curl_exec($ch);
    curl_close($ch);
    $response_a = json_decode($response, true);
    $dist = $response_a['rows'][0]['elements'][0]['distance']['text'];
    $time = $response_a['rows'][0]['elements'][0]['duration']['text'];
    return array('distance' => $dist, 'time' => $time);
}
while($row = $result->fetch_assoc()) {
//Start of  calculate distance and time
$lat1 = "-1.283180";
$long1 = "36.822462";
$lat2 = $row["lat"];
$long2 = $row["lng"];
$dist = GetDrivingDistance($lat1, $lat2, $long1, $long2);
$distance = $dist['distance'];
$time = $dist['time'];
//End of calculate distance and time
         echo "". $row["id"]. " ". $row["reg_number"]. " (" . $row["sacco"] . ") -$time\n";
     }
} else {
     echo "0 results";
}
$conn->close();
试试这个:
不能在循环中声明函数

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
     die("Connection failed: " . $conn->connect_error);
} 
$sql = "SELECT * 
                    FROM matatus 
                    JOIN registered_matatus
                    ON matatus.user_id=registered_matatus.user_id 
                    ORDER BY matatus.vehicle_id 
                    ASC LIMIT 4";
if ($result->num_rows > 0) {
     // output data of each row
     echo "CON Select a matatu\n";

function GetDrivingDistance($lat1, $lat2, $long1, $long2)
{
    $url = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=".$lat1.",".$long1."&destinations=".$lat2.",".$long2."&mode=driving&language=pl-PL";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    $response = curl_exec($ch);
    curl_close($ch);
    $response_a = json_decode($response, true);
    $dist = $response_a['rows'][0]['elements'][0]['distance']['text'];
    $time = $response_a['rows'][0]['elements'][0]['duration']['text'];
    return array('distance' => $dist, 'time' => $time);
}
while($row = $result->fetch_assoc()) {
//Start of  calculate distance and time
$lat1 = "-1.283180";
$long1 = "36.822462";
$lat2 = $row["lat"];
$long2 = $row["lng"];
$dist = GetDrivingDistance($lat1, $lat2, $long1, $long2);
$distance = $dist['distance'];
$time = $dist['time'];
//End of calculate distance and time
         echo "". $row["id"]. " ". $row["reg_number"]. " (" . $row["sacco"] . ") -$time\n";
     }
} else {
     echo "0 results";
}
$conn->close();

尝试将函数移出循环…您正在循环中定义函数,这意味着它不会像正常情况下那样被提升,每次循环通过时,您都会尝试重新声明它。上面的代码会很快失败:SQL永远不会执行,
$result
也不会初始化。尝试将函数移出循环…您正在循环中定义函数,这意味着它不会像正常情况下那样被提升,每次循环通过时,您都会尝试重新声明它。上面的代码会很快失败:SQL永远不会执行,
$result
也不会初始化。