3

こんにちは、クエリを修正して正しい結果を返す方法を見つけようとしています。これが私のクエリです:

$selectShoeRatingQuery = "SELECT cast(round(AVG(rating)*2)/ 2 as decimal(10,1)) FROM rating WHERE shoe_id = '$_GET[id]'";
$shoeRating = mysql_query($selectShoeRatingQuery);

クエリは、小数点以下 1 桁 (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インジェクションgetに対して脆弱です。すべてをエスケープする必要がpostあり、より良いアプローチはPreparedステートメントを使用することです

よく読んだ

  1. PHPでSQLインジェクションを防ぐには?
  2. SQL インジェクションを防ぐには、PDO 準備済みステートメントで十分ですか?

ノート

  1. ext/mysql接頭辞 mysql_ で名前が付けられたすべての関数を提供する PHP 拡張機能全体は、PHP v5.5.0 で正式に非推奨となり、将来的に削除される予定です。したがって、またはのいずれPDOかを使用しますMySQLi

よく読んだ

  1. mysql 拡張機能は非推奨であり、将来削除される予定です。代わりに mysqli または PDO を使用してください
  2. MySQL 開発者向け PDO チュートリアル
  3. 初心者向け Pdo チュートリアル
于 2013-02-07T05:55:54.570 に答える
2

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 を使用します。

于 2013-02-07T06:00:16.923 に答える
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 に答える
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 に答える