0

我已经实现了我的数据库,然后我通过 PHP 从数据库中检索数据。

在我的代码中,我应该按名称过滤数据,如果名称存在,我想打印数据。尽管想要的项目在表中,但没有显示任何内容。我不明白错误在哪里。只有关于数据库中位置的信息,我没有将用户的位置保存在我的数据库中。

我的代码是:

<?php
    $username="myusername";
    $password="mypasswd";
    $database="mydatabase";
    $host="mysqlmyhost.com";
    mysql_connect($host,$username,$password);
    @mysql_select_db($database) or die( "Unable to select database");

    // check for post data
    if (isset($_GET["locationName"])) {
        $locationName = $_GET['locationName'];

        // get a product from products table
        $result = mysql_query("SELECT *FROM Location WHERE locationName =   $locationName");

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

                $product = array();
                $product["locationName"] = $row["locationName"];
                $product["locationInfo"] = $row["locationInfo"];
                $product["locationLatitude"] = $row["locationLatitude"];
                $product["locationLongitude"] = $row["locationLongitude"];
                $product["locationPic"] = $row["locationPic"];
                $product["city"] = $row["city"];
                // success
                $response["success"] = 1;

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

                array_push($response["Location"], $product);

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

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

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

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

编辑:

现在,我想向用户显示最近的位置。我已经搜索并更改了代码。我在以 $userLatitude=$_GET['userLatitude']; 开头的行出现错误 . 它说这里有一个意外的 t_string 错误。我无法理解错误是什么。你能再帮忙吗?

   if (isset($_GET["userLatitude"]) && isset($_GET["userLongitude"])) {
$userLatitude=$_GET['userLatitude'];
$userLongitude=$_GET['userLongitude'];
$result = mysql_query("SELECT locationName, ( 6371 * acos( cos( radians(      $userLatitude) ) * cos( radians( locationLatitude ) ) * cos( radians( locationLongitude ) - radians( $userLatitude) ) + sin( radians($userLongitude) ) * sin( radians( locationLatitude) ) ) ) AS distance 
FROM Location HAVING distance < 2 ORDER BY distance LIMIT 0 ,20") or die(mysql_error());
echo $result;


  // check for empty result
  if (mysql_num_rows($result) > 0) {
    // looping through all results
    // products node
    $response["Location"] = array();

    while ($row = mysql_fetch_array($result)) {
    // temp user array
    $product = array();
    $product["locationName"] = $row["locationName"];
    $product["locationInfo"] = $row["locationInfo"];
    $product["locationLatitude"] = $row["locationLatitude"];
    $product["locationLongitude"] = $row["locationLongitude"];
    $product["locationPic"] = $row["locationPic"];
    $product["city"] = $row["city"];



    // push single product into final response array
    array_push($response["Location"], $product);
}
// success
$response["success"] = 1;

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

// echo no users JSON
echo json_encode($response);
 }
 mysql_close();
4

3 回答 3

1

一些想法:

  • 您可能希望在查询中添加单引号,因为某些文本可能包含空格或特殊字符,并且 SQL 喜欢边界。如果您不喜欢它周围的双引号,它仍然应该可以正常工作,但它已成为我的习惯。

可能的代码:

// get a product from products table
$result = mysql_query("SELECT *FROM Location WHERE locationName = '".$locationName."'");
  • 当您将数据存储在数据库中时,您是否考虑了转义字符(即您是否使用 mysql_real_escape_string() 在插入数据时添加斜杠以防止注入攻击或错误数据。)。如果是这样,您可能希望使用相同的函数来验证数据,并且他们使用 stripslashes() 函数返回“标准化”数据以插入到您的响应中。

数据库中的数据示例:that/'s what i/'m talkin/' about /"fella/'/"!

可能的代码:

$locationName = mysql_real_escape_String($_GET['locationName']);

and

$product["locationName"] = stripslashes($row["locationName"]);
  • 您可以添加错误检查和/或显示消息以帮助排除故障

mysql 查询的内联错误显示:( 这将在出现错误时停止页面并显示 MySQL 返回的消息)

$result = mysql_query("SELECT *FROM Location WHERE locationName = $locationName") or die(mysql_error());

PHP 中的一般错误报告:( 这个有点冗长,也显示警告)

// Same as error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);

详细输出 有时我会在页面中添加详细消息,以便验证我提交的查询,并在测试脚本后删除或注释掉它们。

$locationQuery= mysql_query("SELECT *FROM Location WHERE locationName = '".$locationName."'");
echo "Current Query: ".$locationQuery."<br>\n";
$result = mysql_query($locationQuery) or die(mysql_error());
于 2013-04-20T21:32:46.057 回答
0

1.

选择 *从

*后你忘记了空格

2.

WHERE locationName = $locationName"

你应该用引号括起来变量

WHERE locationName = \"$locationName\""

3.

删除这个条件if (!empty($result)) {,因为 $result 是资源并且它不为空

4.

您使用$row变量,将行更改为$row = mysql_fetch_array($result);

总是写或死(mysql_error())

mysql_query('....') 或死(mysql_error());

于 2013-04-20T21:10:04.277 回答
0

在示例代码中,您将返回的数据存储在 $result 变量中,但尝试从 $row 变量中访问它

$result = mysql_fetch_array($result);

$product = array();
$product["locationName"] = $row["locationName"];

尝试

$row = mysql_fetch_array($result);

$product = array();
$product["locationName"] = $row["locationName"];
于 2013-04-20T21:13:37.023 回答