2013-04-20 7 views
0

Я внедрил мою базу данных, а затем получаю данные из базы данных через PHP.Данные в базе данных не получены из MySQL в 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(); 
+0

$ locationName кажется строкой, поэтому ей нужны кавычки: '$ locationName'. Обратите внимание, что вы должны использовать mysqli или pdo или, по крайней мере, дезинфицировать свой вход, прежде чем использовать его в запросе. – RafH

+1

Вы уязвимы для [SQL-инъекций] (http://bobby-tables.com). Исправьте это, прежде чем вы даже подумаете об исправлении остальной части вашего кода. –

+0

У меня есть {"success": 0, "message": "No product found"} message. mysql_num_rows ($ result) равен 0 – user2086258

ответ

0

1.

SELECT * FROM

Вы забываете место после *

2.

WHERE locationName = $ locationName»

вы должны обернуть переменную в кавычки

WHERE locationName = \"$locationName\"" 

3.

удалить это условие if (!empty($result)) {, потому что $ результатом является ресурсом, и это не пустые

4.

вы используете $ row переменная, сменить линию на $row = mysql_fetch_array($result);

написать всегда или умереть (mysql_error())

mysql_query ('....') или умереть (mysql_error());

+0

странно, 'select * from' действительно работает в mysql. выглядит странно, но это действительно так. –

+0

@MarcB, спасибо. Я предпочитаю использовать странные конструкции, я за чистый код – Ozerich

+0

Спасибо! Я рассмотрел ваши желания и сейчас работает! – user2086258

0

В примере кода, вы сохраняете возвращаемые данные в переменной $ результата, но при попытке получить к нему доступ из $ строки переменной

$result = mysql_fetch_array($result); 

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

Попробуйте

$row = mysql_fetch_array($result); 

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

Большое спасибо за ваше предложение =) – user2086258

1

Несколько мыслей :

  • Возможно, вы захотите добавить одинарные кавычки внутри запроса так, me text мог бы иметь пробелы или специальные символы и SQL любит границы.Если вам не нравятся двойные кавычки вокруг него, он все равно должен работать нормально, , но это стало для меня привычкой.

Возможный код:

// get a product from products table 
$result = mysql_query("SELECT *FROM Location WHERE locationName = '".$locationName."'"); 
  • Когда вы храните ваши данные в базе данных, сделали вы объясняете экранированные символы (т.е. вы использовали mysql_real_escape_string() для добавить слэш к данным, которые были вставлены, чтобы предотвратить инъекции атак или ошибочных данных.). Если это так, вы можете использовать ту же функцию , чтобы проверить данные, и они используют функцию stripslashes() для возвращать «нормализованные» данные для вставки в ваш ответ.

Пример данных в базе данных: это то, что я/'m talkin /' abuot/"fella/'/"!

Возможный код:

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

and 

$product["locationName"] = stripslashes($row["locationName"]); 
  • Вы можете добавить проверку на наличие ошибок и/или отображать сообщения, чтобы помочь устранение неисправностей

ошибки INLINE отображения для 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); 

Многословный выход Иногда добавляю многословные сообщения в пределах страницы, так что я могу проверить запросы в ubmit и либо удалить, либо прокомментировать их после проверки скрипта.

$locationQuery= mysql_query("SELECT *FROM Location WHERE locationName = '".$locationName."'"); 
echo "Current Query: ".$locationQuery."<br>\n"; 
$result = mysql_query($locationQuery) or die(mysql_error()); 
+0

Большое спасибо за ваше предложение =) – user2086258