MySQL查询返回资源ID#8,而不是所需值[关闭]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL查询返回资源ID#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等人。更好。而且您的查询容易受到攻击。
从Php Manual引用
对于SELECT,SHOW,DESCRIBE,EXPLAIN和其他返回结果集的语句,mysql_query()在成功时返回资源,在错误时返回FALSE。
您需要获取才能使用它
$row = MySQL_fetch_row($query);
如果现在不使用预备语句,则至少使用mysql_real_escape_string
mysql_real_escape_string
警告
您的代码容易受到 'mysql_real_escape_string($_GET[id])'"
的攻击,您需要转义所有sql injection和get
,更好的方法是使用post
Good Read
注
- 整个Are PDO prepared statements sufficient to prevent SQL injection? PHP扩展,提供了所有带有前缀mysql_的函数,为
ext/mysql
,以后将被删除。因此,请使用officially deprecated as of PHP v5.5.0或PDO
读得好
MySQLi
- The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead
- PDO Tutorial for MySQL Developers
通过PHP调用时,选择查询返回Pdo Tutorial For Beginners,它实际上是指向结果第一行的指针。要获取数据,您将必须使用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.
}
函数,因为它们已被弃用。使用MySQLi或PDO。
尝试,
mysql
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
以上是关于MySQL查询返回资源ID#8,而不是所需值[关闭]的主要内容,如果未能解决你的问题,请参考以下文章