Запрос Mysql возвращает идентификатор ресурса # 8 вместо желаемого значения

Привет, я пытаюсь выяснить, как исправить мой запрос, чтобы вернуть правильный результат. Вот мой запрос:

$selectShoeRatingQuery = "SELECT cast(round(AVG(rating)*2)/ 2 as decimal(10,1)) FROM rating WHERE shoe_id = '$_GET[id]'"; $shoeRating = mysql_query($selectShoeRatingQuery); 

Запрос должен возвращать число с одним десятичным знаком (3.5). Он отлично работает при тестировании в PhpMyAdmin, однако на моем сайте он возвращает resource id #8 .

Соединение с базой данных работает отлично.

mysql_query возвращает ресурс. Вам нужно получить строку:

 $query = mysql_query($selectShoeRatingQuery); $row = mysql_fetch_row($query); $shoeRating = $row[0]; 

И, если у вас нет выбора – не используйте набор расширений mysql_ ! Они устарели, и PDO et. и др. лучше. И ваш запрос уязвим.

Цитата из Php Manual

Для SELECT, SHOW, DESCRIBE, EXPLAIN и других операторов, возвращающих набор результатов, mysql_query () возвращает ресурс с успехом или FALSE при ошибке.

вам нужно получить его за то, что вы можете использовать

 $row = MySQL_fetch_row($query); 

если вы не используете Подготовленные утверждения теперь по крайней мере используйте mysql_real_escape_string

  'mysql_real_escape_string($_GET[id])'" 

Предупреждение

ваш код уязвим для SQL-инъекции, вам нужно избегать всех get и post а лучший подход будет заключаться в использовании подготовленного оператора

Хорошо для чтения

  1. Как предотвратить SQL-инъекцию в PHP?
  2. Являются ли подготовленные PDO заявления достаточными для предотвращения SQL-инъекций?

Заметка

  1. Все расширение ext/mysql PHP, которое предоставляет все функции с именем prefix mysql_, официально устарело с PHP v5.5.0 и будет удалено в будущем. Поэтому используйте PDO или MySQLi

Хорошо для чтения

  1. Расширение mysql устарело и будет удалено в будущем: вместо этого используйте mysqli или PDO
  2. Обучение PDO для разработчиков MySQL
  3. Учебник Pdo для начинающих

При вызове через PHP запрос select возвращает Resource , который по существу является указателем на первую строку результата. Для извлечения данных вам нужно будет использовать mysql_fetch_array , который получит строку, указанную указателем.

После прочтения строки указатель будет автоматически увеличиваться, указывая на следующую строку.

Итак, ваш код будет чем-то вроде этого

 $connection = mysqli_connect(...); $query = ""; //put your query here $result = mysqli_query($connection, $query); while($row = mysqli_fetch_array($result, MYSQL_ASSOC)) { //$row will contain the data of the row in an array format. Use it here. } 

Более того, не используйте функции mysql поскольку они устарели сейчас. Используйте MySQLi или PDO.

пытаться,

 SELECT round(AVG(rating) * 2.0) / 2.0 AS result FROM rating WHERE .... 
 $selectShoeRatingQuery = "SELECT cast(round(AVG(rating)*2)/ 2 as decimal(10,1)) as `num` FROM rating WHERE shoe_id = '$_GET[id]'"; $shoeRating = mysql_query($selectShoeRatingQuery); $r = mysql_fetch_row($shoeRating); echo $r['num'];// <--- alias 
 $selectShoeRatingQuery = "SELECT cast(round(AVG(rating)*2)/ 2 as decimal(10,1)) as rating FROM rating WHERE shoe_id = '$_GET[id]'"; $shoeRating = mysql_query($selectShoeRatingQuery); $result = mysql_fetch_array($shoeRating); echo $result["rating"];