Привет, я пытаюсь выяснить, как исправить мой запрос, чтобы вернуть правильный результат. Вот мой запрос:
$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
а лучший подход будет заключаться в использовании подготовленного оператора
Хорошо для чтения
ext/mysql
PHP, которое предоставляет все функции с именем prefix mysql_, официально устарело с PHP v5.5.0 и будет удалено в будущем. Поэтому используйте PDO
или MySQLi
Хорошо для чтения
При вызове через 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"];