gpt4 book ai didi

php - 从 php 请求中获取一组值并运行 mysql 查询

转载 作者:行者123 更新时间:2023-11-29 07:25:42 25 4
gpt4 key购买 nike

我有这个表,其中包含以下列。

  • 身份证
  • 地点 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 新手。

最佳答案

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

非常快速的解决方案是将该数组转换为逗号分隔的字符串,如下所示:

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

但是,这一点很重要:您的代码容易受到 SQL injection 的攻击。 。如果有人知道发送到您的 PHP 代码的 URL,他们可能会造成相当大的损害!你应该使用 prepared statements (并移至 mysqliPDO!)并使用参数。

您还应该将结果处理变成一个循环来处理所有记录,并将它们收集在一个数组中。因此,将 if 替换为 while,并直接填充 $response["place"]。请注意,您的 if 正在使用第一条记录的数组覆盖原始 $results 结果集,这会使您丢失原始 $result目的。但你需要它来循环它。所以我引入变量$row:

// 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);
}

关于php - 从 php 请求中获取一组值并运行 mysql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34613303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com