如何在PHP数组中存储和处理查询结果?

亚历克斯

我在PHP中的SQLite查询是这样的:

function getTableData($l_name) {
   $db = new PDO("sqlite:../db/mydb.sqlite");
   $results = $db->exec("SELECT * FROM Locations WHERE L_ID = '" . $l_name; . "');";
   .......
}

我的问题是:

  • 如何获得基于的位置数组$results我可以分别写$results[0]$results[$results.length]引用第一条记录和最后一条记录吗?
  • 我将如何使用foreach循环遍历所有记录?我能否拥有foreach ($results as $record),在$record当前迭代中哪里应该是Location的单个记录?
  • 如果要引用单个记录,例如使用这样的数组records[0],我将如何访问该记录的字段(例如L_Name或L_ID)?

谢谢你。

你的常识

首先,您的代码不正确。这里是正确的版本:

$opt = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
];
$db = new PDO("sqlite:../db/mydb.sqlite", $opt);
$stmt = $db->prepare("SELECT * FROM Locations WHERE L_ID = ?");
$stmt->execute([$l_name]);

现在,您可以在第二个问题中使用$ stmt变量代替$ results:

我将如何使用foreach循环遍历所有记录?我是否可以foreach($ results为$ record),其中$ record应该是当前迭代中Location的单个记录?

是的你可以。

$stmt = $db->prepare("SELECT * FROM Locations WHERE L_ID = ?");
$stmt->execute([$l_name]);
foreach ($stmt as $row)
{
    // do whatever
}

但是,此方法无法满足您的其他要求。

如何根据$ results获得一系列位置信息?我可以只写$ results [0]或$ results [$ results.length]分别引用第一条记录和最后一条记录吗?

要获得一个真实的数组,您需要PDOStatement::fetchAll()‌​方法。但是,要获取最后一个元素,语法将有所不同:

$stmt = $db->prepare("SELECT * FROM Locations WHERE L_ID = ?");
$stmt->execute([$l_name]);
$results = $stmt->fetchAll();
$first = $results[0];
$last = $results[count($results)-1];

foreach ($results as $row)
{
    // do whatever
}

如果要引用单个记录,例如使用类似于records [0]的数组,我将如何访问该记录的字段(例如L_Name或L_ID)?

只是参考一下。任何时候只要一行,就可以用这种方式解决它的元素

echo $row['L_name'];

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章