php pdo中的JSON解析Mysql查询结果
我正在努力做到以下几点php pdo中的JSON解析Mysql查询结果,php,web-services,pdo,Php,Web Services,Pdo,我正在努力做到以下几点 $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; }
$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数组中,我怎么能做到呢
就像返回json_encode(数组('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;
}
顺便说一句,使用原始API并不方便。使用数据库抽象库,您的代码可以短至以下两行:
$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));
但在使用数据库抽象库时,将有相同的两行代码:
$data = $db->getAll('SELECT * FROM myTable where id IN (?a)', $ids);
return json_encode(array('Result'=>$data));
Edit2:如果你只需要身份证
$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));
使用数据库抽象库时,仍然有两行代码:
$ids = $db->getCol('SELECT id FROM myTable');
return json_encode(array('Result'=>$ids));
根据其他评论:最佳选择:
$sql = '
SELECT *
FROM table1 AS t1
INNER JOIN table2 t2
ON t2.foreign_key = t1.id
';
或
($row=$statement->fetchAll(PDO::FETCH_ASSOC))我有这段代码来获取所有条目的列表,这些条目将给我id,现在要使$ids=array(1,2,3);我将如何做到这一点?请指出我很困惑,您只需要查询中的id?不,我从另一个表中获取id,因为我希望使用for循环,但这里您使用了array(1,2,3),如何像我理解的那样制作我的id列表:您有来自
table1
的数据,并且您需要从table2
获取数据,其中table2.foreign\u输入(table1.id,table1.id,…)
。正确吗?($row=$statement->fetchAll(PDO::fetch\u ASSOC))我有这段代码来获取所有条目的列表,这些条目将为我提供ID,现在要使$ids=array(1,2,3);我将如何做?请指出这一点——我也没有明白我的意思,有了这段代码,我首先获取ID,然后需要进行查询以获取这些ID的条目,所以我现在的问题是$row=$statement->fetchAll(PDO::FETCH_ASSOC))转换为$ids=数组(1,2,3);你需要更确定地表达你的愿望
$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