0

私は次のことをしようとしています

$statement = $conn->prepare('SELECT * FROM myTable');
$statement->execute();

if(!($row = $statement->fetchAll(PDO::FETCH_ASSOC))) 
{
    return false;
}

$conn = null;
} catch(PDOException $e) {
    throw $e;
    return false;
}       

return  return json_encode(array('Result'=>$row);

テーブル内のすべてのエントリを処理してフェッチし、JSON配列を作成して送信します。

ただし、選択したIDをJSON配列で送信する必要があるクエリを作成したい

例:10、20、30

これはおそらくForループで行われると思います

$statement = $conn->prepare('SELECT * FROM myTable WHERE id = :id');
$statement->bindParam(':id', $id, PDO::PARAM_STR);
$statement->execute();

$row = $statement->fetch(PDO::FETCH_OBJ)))

ここで、idが10,20,30であり、それらすべてをJSON配列に追加したいとします。どうすればよいですか?

と同じように return json_encode(array('Result'=>$row);

編集されたコード

    function GetMyMembers() 
    {
        $myId = trim($_REQUEST['myId']);

        try {
            $conn = $this->GetDBConnection();

            $statement = $conn->prepare('SELECT valId FROM memList WHERE myId=:myId' );
            $statement->bindParam(':myId', $myId, PDO::PARAM_INT);
            $statement->execute();

            if(!($row = $statement->fetchAll(PDO::FETCH_ASSOC))) 
            {
                return false;
            }

// $row contains ALL THE ID'S

            $placeholders = str_repeat('?,', count($row));
            $placeholders = substr($placeholders, 0, -1);
            $sql = "SELECT id, * FROM players WHERE id IN ($placeholders)";
            $statement = $conn->prepare($sql);
            $statement->execute($row);
            $rows = $sth->fetchAll(PDO::FETCH_ASSOC|PDO::FETCH_GROUP);

            $conn = null;
        } catch(PDOException $e) {
            throw $e;
            return false;
        }       
        return $rows;
    }
4

2 に答える 2

1
$statement = $conn->prepare('SELECT * FROM myTable');
$statement->execute();
$data = array();
while($row = $statement->fetch(PDO::FETCH_ASSOC))) 
{
    $data[$row['id']] = $row;
}
return json_encode(array('Result'=>$data));

ところで、未加工の API を使用するのは便利ではありません。データベース抽象化ライブラリを使用すると、コードを次の 2 行まで短くすることができます。

$data = $db->getInd("id",'SELECT * FROM myTable');
return json_encode(array('Result'=>$data));

編集:
IDの配列がある場合は、より複雑なコードが必要です

$ids  = array(1,2,3);
$data = array();
$statement = $conn->prepare('SELECT * FROM myTable WHERE id = :id');
foreach ($ids as $id) {
    $statement->bindValue(':id', $id, PDO::PARAM_STR);
    $statement->execute();
    $data[] = $statement->fetch(PDO::FETCH_OBJ);
}
return json_encode(array('Result'=>$data));

ただし、データベース抽象化ライブラリを使用している間は、同じ 2 行があります。

$data = $db->getAll('SELECT * FROM myTable where id IN (?a)', $ids);
return json_encode(array('Result'=>$data));

Edit2:
ID のみが必要な場合

$statement = $conn->prepare('SELECT id FROM myTable');
$statement->execute();
$data = array();
while($row = $statement->fetch(PDO::FETCH_ASSOC))) 
{
    $data[] = $row['id'];
}
return json_encode(array('Result'=>$data));

データベース抽象化ライブラリを使用している間は、まだ 2 行です。

$ids = $db->getCol('SELECT id FROM myTable');
return json_encode(array('Result'=>$ids));
于 2013-01-29T07:33:02.493 に答える
0
$ids = array(1,2,3);
$placeholders = str_repeat('?,', count($ids));
$placeholders = substr($placeholders, 0, -1);
$sql = "SELECT id, * FROM table WHERE id IN ($placeholders)";
$sth = $dbh->prepare($sql);
$sth->execute($ids);
$rows = $sth->fetchAll(PDO::FETCH_ASSOC|PDO::FETCH_GROUP);
echo json_encode(array('Result' => $rows));

追加のコメントに基づく:
最良のオプション:

$sql = '
SELECT *
FROM table1 AS t1
INNER JOIN table2 t2
ON  t2.foreign_key = t1.id
';

また

$sql = 'SELECT id FROM table1';
$sth = $dbh->prepare($sth);
$sth->execute();
$ids = $sth->fetchColumn();
//next look above
于 2013-01-29T07:38:18.663 に答える