2016-01-05 20 views
0

我有这张表,其中包含以下列。从php请求中获取值的数组并运行mysql查询

  • 编号
  • place_id
  • 纬度
  • 经度
  • 提供

我得给定位置ID数组的报价。但是,我已经实现了这一点,它不会返回任何结果。以下是我的要求。

http://localhost:8001/googleplaces/getOffers.php?place_id[]=%22epc888%22&place_id[]=%22epc999%22 

下面是我写的PHP脚本。

<?php 
    $response = array(); 
    $pid =array(); 
    require_once __DIR__ . '/db_connect.php'; 
    $db = new DB_CONNECT(); 
    if (isset($_GET["place_id"])) { 
     $pid = $_GET['place_id']; 

     $result = mysql_query("SELECT * FROM places WHERE place_id IN ($pid)"); 

     if (!empty($result)) { 
     // check for empty result 
     if (mysql_num_rows($result) > 0) { 

     $result = mysql_fetch_array($result); 

     $place = array(); 
     $place["place_id"] = $result["place_id"]; 
     $place["offers"] = $result["offers"]; 
     // success 
     $response["success"] = 1; 

     // user node 
     $response["place"] = array(); 

     array_push($response["place"], $place); 

     // echoing JSON response 
      echo json_encode($response); 
      } else { 
       // no product found 
       $response["success"] = 0; 
       $response["message"] = "No offers found"; 

       // echo no users JSON 
       echo json_encode($response); 
      } 
     } else { 
     // no product found 
     $response["success"] = 0; 
     $response["message"] = "No offers found"; 

      // echo no users JSON 
      echo json_encode($response); 
     } 
     } else { 
     // required field is missing 
     $response["success"] = 0; 
     $response["message"] = "place_id is missing"; 

     // echoing JSON response 
     echo json_encode($response); 
    } 
    ?> 

尽管满足上述要求的记录有几条,但这是我得到的回应。

{"success":0,"message":"No offers found"} 

我在做什么错在这里?请指教。我是PHP新手。

+0

你为什么要使用* mysql_ * - 这些功能已被弃用?此外,您的代码易受SQL注入攻击。 – trincot

+0

是的,这是通过我的Android应用程序称为小码片。所以,我不介意这些:)你能告诉我在哪里,我已经错在这里? :( – mayooran

+0

@trincot我照你说的做了,请参考编辑过的问题,但我仍然只能得到一个输出,请帮忙:( – mayooran

回答

1

由于PHP检测URL参数place_id[]是数组类型,它会呈现值作为数组。但是,您将$ pid注入到SQL中。 PHP会对此提出警告,但仍会执行隐式转换并继续。例如,如果数组是(1,2,3),那么它将被转换为字符串“Array.1,2,3”,这会导致无效的SQL语法。

很快的解决办法是把数组到逗号分隔的字符串,像这样:

$pid = implode(",", $_GET['place_id']); 

然而,这一点很重要:你的代码很容易受到SQL injection。如果有人知道发送到您的PHP代码的URL,他们可能会造成很大的损失!您应该使用prepared statements(并移至mysqliPDO

您还应该将结果处理转换为循环来处理所有记录,并将它们收集到一个数组中。因此用while代替if,并直接填充$ response [“place”]。请注意,您if被覆盖原始$结果结果集与第一记录的阵列,它让你失去了原有的$结果对象。但是你需要它来循环播放它。所以我引入变量$行

// check for empty result 
if (mysql_num_rows($result) > 0) { 
    // user node 
    $response["place"] = array(); // array of places 
    while ($row = mysql_fetch_array($result)) { 
     $response["place"][] = array(
      "place_id" => $row["place_id"], 
      "offers" => $row["offers"] 
     ); 
    } 
    // success 
    $response["success"] = 1; 
    // echoing JSON response 
    echo json_encode($response); 
} 
+0

添加行后,我只得到一个记录,另一个没有返回。我正确地返回记录的方式吗?$ place数组是否保存所有输出? – mayooran

+0

使用while循环,查看更新的答案。还要注意,同时从'$ result' --->非常糟糕的代码让你分配给'$ result'! – trincot

+0

非常感谢队友!搞定了。 – mayooran

1

这个:$_GET['place_id']是你的例子中的一个数组,所以你需要把它当作你的查询中的一个。

所以,你可以这样做:

$pid = implode(",", $_GET['place_id']); 

不是最好的方式,但它应该得到它的工作。虽然你可能想逃避并消毒。


得到你需要通过他们来遍历所有的结果一样:

// success 
    $response["success"] = 1; 
    // user node 
    $response["place"] = array(); 

    while ($result = mysql_fetch_array($result)) { 
     $response["place"][] = array( 
      "place_id" => $result["place_id"], 
      "offers" => $result["offers"], 
     ); 
    } 
+0

加入这行后,我只得到一条记录,另一条没有返回。我正在返回记录的方式是否正确?$ place数组是否保存了所有的输出? – mayooran

+0

是的,我认为这就是你想要的,如果你需要返回所有结果,那么你需要遍历它们。可以更新我的答案。 – segFault

+0

在放置代码后,出现此错误:(解析错误:语法错误,意外的';',期待')'在第26行C:\ wamp \ www \ googleplaces \ getOffers.php – mayooran