Mysql查询返回资源ID#8而不是期望值

时间:2013-02-07 05:52:25

标签: php mysql

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

$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

数据库连接一切正常。

6 个答案:

答案 0 :(得分:8)

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

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

而且,除非您别无选择,否则请勿使用mysql_套扩展名!他们被弃用了,PDO等。人。更好。而且您的查询容易受到攻击。

答案 1 :(得分:4)

  

引自Php Manual

     

对于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攻击,您需要撤消所有getpost,更好的方法是使用Prepared statement

好读

  1. How to prevent SQL injection in PHP?
  2. Are PDO prepared statements sufficient to prevent SQL injection?

  3. 注意

    1. 整个 ext/mysql PHP扩展程序(提供名为mysql_的所有函数)为officially deprecated as of PHP v5.5.0,将来会被删除。因此,请使用PDOMySQLi
    2. 好读

      1. The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead
      2. PDO Tutorial for MySQL Developers
      3. Pdo Tutorial For Beginners

答案 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"];