您好我正在尝试发现如何修复我的查询以返回正确的结果。这是我的疑问:
$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
。
数据库连接一切正常。
答案 0 :(得分:8)
mysql_query
返回资源。你需要从中获取一行:
$query = mysql_query($selectShoeRatingQuery);
$row = mysql_fetch_row($query);
$shoeRating = $row[0];
而且,除非您别无选择,否则请勿使用mysql_
套扩展名!他们被弃用了,PDO等。人。更好。而且您的查询容易受到攻击。
答案 1 :(得分:4)
对于SELECT,SHOW,DESCRIBE,EXPLAIN和其他返回结果集的语句,mysql_query()会在成功时返回资源,或者在出错时返回FALSE。
你需要获取它才能使用
$row = MySQL_fetch_row($query);
如果您现在至少使用Prepared语句,请至少使用mysql_real_escape_string
'mysql_real_escape_string($_GET[id])'"
您的代码容易受到sql injection攻击,您需要撤消所有get
和post
,更好的方法是使用Prepared statement
好读
ext/mysql
PHP扩展程序(提供名为mysql_的所有函数)为officially deprecated as of PHP v5.5.0,将来会被删除。因此,请使用PDO
或MySQLi
好读
答案 2 :(得分:1)
当通过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。
答案 3 :(得分:0)
试,
SELECT round(AVG(rating) * 2.0) / 2.0 AS result
FROM rating
WHERE ....
答案 4 :(得分:0)
$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
答案 5 :(得分:0)
$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"];