3

您好我正在尝试发现如何修复我的查询以返回正确的结果。这是我的查询:

$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.

数据库连接一切正常。

4

6 回答 6

9

mysql_query返回一个资源。您需要从中获取一行:

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

而且,除非您别无选择 - 不要使用mysql_扩展集!它们已被弃用,PDO 等。更好。而且您的查询很容易受到攻击。

于 2013-02-07T05:54:29.817 回答
4

引用PHP 手册

对于 SELECT、SHOW、DESCRIBE、EXPLAIN 和其他返回结果集的语句,mysql_query() 成功时返回资源,错误时返回 FALSE。

您需要获取它以供您使用

$row = MySQL_fetch_row($query);

如果你现在不使用准备好的语句,至少使用mysql_real_escape_string

 'mysql_real_escape_string($_GET[id])'"

警告

您的代码容易受到sql 注入的影响,您需要全部转义getpost更好的方法是使用Prepared 语句

好读

  1. 如何防止 PHP 中的 SQL 注入?
  2. PDO 准备好的语句是否足以防止 SQL 注入?

笔记

  1. 整个ext/mysqlPHP 扩展提供了以 mysql_ 为前缀的所有函数,从 PHP v5.5.0 开始正式弃用,并将在未来删除。所以使用PDO或者MySQLi

好读

  1. 不推荐使用 mysql 扩展并将在将来删除:请改用 mysqli 或 PDO
  2. MySQL 开发人员的 PDO 教程
  3. Pdo 初学者教程
于 2013-02-07T05:55:54.570 回答
2

当通过 PHP 调用时,选择查询返回 a 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。

于 2013-02-07T06:00:16.923 回答
0

尝试,

SELECT round(AVG(rating) * 2.0) / 2.0 AS result
FROM rating
WHERE ....
于 2013-02-07T05:53:22.577 回答
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
于 2013-02-07T05:54:19.847 回答
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"];
于 2013-02-07T06:01:04.047 回答