-1

select count(*) を複数のパラメーターで使用して行数を取得し、JSON 形式でエンコードしようとしましたが、次のようになりました。

{"notification":[{"count(*)":0}],"message":[{"count(*)":0}]}

例外の代わりに:

{"notification":0,"message":0}

ここにページのコードがあります:

session_start();
require_once __DIR__ . '/mysql/Db.class.php';
$bdd = new Db();
$t = array();

$query = $bdd->query("SELECT count(*) FROM notification WHERE id_proprio = :id_proprio AND readed = :readed", array("id_proprio"=> $_SESSION['userid'],"readed"=>"0"));
$query_2 = $bdd->query("SELECT count(*) FROM discussion WHERE id_1 = :uid AND readed = :readed AND notifPour = :uid2 OR id_2 = :uid3 AND readed = :readed2 AND notifPour = :uid4", array(
  "uid"=> $_SESSION['userid'],
  "readed"=>"0",
  "uid2"=> $_SESSION['userid'],
  "uid3"=> $_SESSION['userid'],
  "readed2"=>"0",
  "uid4"=> $_SESSION['userid']
));


$t["notification"] = $query;
$t["message"] = $query_2;

echo json_encode($t);

クラス Db の一部を含む:

public function query($query,$params = null,$fetchmode = PDO::FETCH_ASSOC)
{
    $query = trim($query);

    $this->Init($query,$params); // INIT IS THE CONNECTION TO DB

    if (stripos($query, 'select') === 0) {
        return $this->sQuery->fetchAll($fetchmode);
    }
    elseif (stripos($query, 'insert') === 0 ||  stripos($query, 'update') === 0 || stripos($query, 'delete') === 0) {
    return $this->sQuery->rowCount(); 
    } else {
        return NULL;
    }
}

次のような例外結果形式を取得するにはどうすればよいですか:

{"notification":0,"message":0}

ありがとうございました。

4

2 に答える 2

1

まず、SQL クエリを変更します。

SELECT count(*) AS cnt FROM

そして、次のようにクエリから値をフェッチします。

$t["notification"] = $query[0]["cnt"];
$t["message"] = $query2[0]["cnt"];
于 2013-11-04T21:52:53.237 に答える
0

MySQL API はすべての行の配列を返します。各行は連想配列であり、そのキーはSELECT句のラベルです。配列から値を抽出する必要があります。

 $t["notification"] = $query[0]['count(*)'];
 $t["message"] = $query_2[0]['count(*)'];
于 2013-11-04T21:52:41.927 に答える