Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP数组中存储和处理查询结果?_Php_Sqlite_Pdo - Fatal编程技术网

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

如何在PHP数组中存储和处理查询结果?,php,sqlite,pdo,Php,Sqlite,Pdo,我在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]或$res

我在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
    应该是当前迭代中位置的单个记录吗
  • 如果我要引用一个单独的记录,比如说使用这样的数组
    records[0]
    ,我将如何访问该记录的字段(如L\u Name或L\u ID)

谢谢。

以下是循环查询结果的基本代码,允许您引用返回的每条记录中的字段:

foreach ($db->$query("SELECT * FROM Locations WHERE L_ID = '" . $l_name . "'") as $row)
{
    // $row will contain an array to the current record
    // Address fields using the field name in quotes inside the brackets next to $row
    $variable1 = $row['field1name'];
    $variable2 = $row['field2name'];
}

首先,你的代码是不正确的。下面是正确的版本:

$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 as$record),其中$record应该是当前迭代中位置的单个记录吗

是的,你可以

$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
}
如果我有一个对单个记录的引用,比如说使用像这个记录[0]这样的数组,我将如何访问这个记录的字段(比如L_Name或L_ID)

只要参考一下就行了。任何时候你得到一行,你都可以用这种方式处理它的元素

echo $row['L_name'];

PDO::exec
未收到查询返回的结果集。您想要使用的是
PDO::query
方法或
PDO::prepare
方法,这两种方法都为您提供了一个
PDO语句
。这反过来是可遍历的,允许您执行以下操作:

$statement = $dbh->prepare("SELECT * FROM Locations WHERE L_ID = :id");
$statement->bindParam(':id', $l_name);
$statement->execute();

// Traverse the result set
while ($row = $statement->fetch()) {
    // Do something with each $row here
}

// Alternatively, you can load all results into an array:
$results = $statement->fetchAll();
还要注意,上面的示例使用
PDOStatement::bindParam
将变量用于查询。这对于防止SQL注入攻击至关重要。您可以在此处了解更多信息:

看起来像是您想要的。您可以执行
$records=$results->fetchAll()。然后您可以在该数组上循环,即。
foreach($records as$records){$record['L_Name']}
,或者直接选择它,即。
$records[0]['L_Name']