Skip to main content

SQLite PHP:查询数据

要从表中查询数据,请使用以下步骤:

请参阅以下getProjects()方法。

    /**
* Get all projects
* @return type
*/
public function getProjects() {
$stmt = $this->pdo->query('SELECT project_id, project_name '
. 'FROM projects');
$projects = [];
while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
$projects[] = [
'project_id' => $row['project_id'],
'project_name' => $row['project_name']
];
}
return $projects;
}

此方法使用以下SELECT语句从projects表中检索所有项目。

SELECT project_id,
project_name
FROM projects;

首先,我们调用PDO对象的query()方法来查询projects表中的数据。query()方法返回PDOStatement对象,即$stmt。

其次,我们调用PDOStatement对象的fetch()方法从结果集中检索下一行。我们将以下值传递给fetch()方法的fetch_样式参数。

\PDO::FETCH_ASSOC

fetch_style参数确定行如何返回给调用方。FETCH_ASSOC意味着FETCH()方法将返回一个按列名索引的数组。

第三,我们在while循环中收集数据,并将结果作为项目的关联数组返回。

如果希望fetch()方法将结果集中的行作为对象返回,可以使用\PDO::fetch_OBJ或fetchObject()方法。

下面的getProjectObjectList()方法返回项目对象的列表。

     /**
* Get the project as an object list
* @return an array of Project objects
*/
public function getProjectObjectList() {
$stmt = $this->pdo->query('SELECT project_id, project_name '
. 'FROM projects');

$projects = [];
while ($project = $stmt->fetchObject()) {
$projects[] = $project;
}

return $projects;
}

请注意,对象的属性名称与结果集中的列名相对应。例如,可以通过以下方式访问项目对象的属性名称:

$project->project_id;
$project->project_name;

请参阅下面的getTasks()方法。

    /**
* Get tasks by the project id
* @param int $projectId
* @return an array of tasks in a specified project
*/
public function getTaskByProject($projectId) {
// prepare SELECT statement
$stmt = $this->pdo->prepare('SELECT task_id,
task_name,
start_date,
completed_date,
completed,
project_id
FROM tasks
WHERE project_id = :project_id;');

$stmt->execute([':project_id' => $projectId]);

// for storing tasks
$tasks = [];

while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
$tasks[] = [
'task_id' => $row['task_id'],
'task_name' => $row['task_name'],
'start_date' => $row['start_date'],
'completed_date' => $row['completed_date'],
'completed' => $row['completed'],
'project_id' => $row['project_id'],
];
}

return $tasks;
}

在这种方法中,我们获取与项目关联的所有任务,因此需要将项目id传递给SELECT语句。

为此,我们使用prepare()方法准备要执行的SELECT语句,并使用execute()方法将项目id传递给该语句。

如果SELECT语句返回一个值,例如,当我们在查询中使用聚合函数时,例如COUNT、AVG、SUM、MIN、MAX等。

要获取该值,可以使用fetchColumn()方法,该方法从结果集中的下一行返回一列。

请参阅下面的getTaskCountByProject()方法,该方法返回指定项目中的任务数。

    /**
* Get the number of tasks in a project
* @param int $projectId
* @return int
*/
public function getTaskCountByProject($projectId) {

$stmt = $this->db->prepare('SELECT COUNT(*)
FROM tasks
WHERE project_id = :project_id;');
$stmt->bindParam(':project_id', $projectId);
$stmt->execute();
return $stmt->fetchColumn();
}

在本教程中,我们展示了使用PHP PDO在SQLite数据库中查询数据的各种方法。