sqlite从pdo结果集创建表


sqlite create table from pdo resultset?

有没有人有或可以指出使用php-pdo创建sqlite内存表的好例子,其中表列格式直接从pdo查询结果中收集?

我的用例是,我想使用SQLite3来存储从多个不同数据库返回的多个查询(都是相同的列顺序等)的多个结果集。最终目标是使用SQLite来"减少"要完成的数据。

我知道我可以为每个查询结果编写一个自定义函数,但我的目标是实现一个通用的解决方案,不需要知道表结构,传递x个同质结果集(例如PDO::FETCH_ASSOC数组结果),并返回一个临时SQLite表名,以便能够在丢弃数据之前使用SQLite查询结果集的UNION。

这似乎会在互联网上的某个地方发布,SQLite网站甚至暗示这是一个用例,但我所有的搜索都指向SQLite关于创建和查询的基本说明。。。提前感谢!

由于没有人回复,这是一个粗略的努力。这是基于数据库句柄是mySQL,但也可以忽略类型,让sqlite发挥一些作用。如果是,请参阅此链接:

https://www.sqlite.org/datatype3.html

try{
$link = connectToDB_PDO();
$strSQL="select * from website.customers";
$mySth=$link->prepare($strSQL);
$meta=array();
$mySth->execute();
foreach(range(0, $mySth->columnCount() - 1) as $column_index){
  $meta[] = $mySth->getColumnMeta($column_index);
}
$result=$mySth->fetchAll(PDO::FETCH_ASSOC);
// Create new database in memory
$memdb = new PDO('sqlite::memory:');
$memdb->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);    // Set errormode to exceptions
$tablename='mytable';
$colnames=array();                      // for the insert statement below
$tableSQL="CREATE TABLE $tablename ( ";
foreach($meta as $col){
  $colnames[]=$col['name'];
  $tableSQL.=" ".$col['name']. " ".$col['native_type']." ";
  if(array_key_exists('flags',$col)){
    foreach($col['flags'] as $flag){
      switch($flag)
      {
        case 'not_null':
          $tableSQL.=" NOT NULL ";
          break;
        case 'primary_key':
          $tableSQL.=" PRIMARY KEY ";
          break;
        default:
      } // end switch
    }  // end each flag
  } // end if flags
  $tableSQL.=", ";
} // end each column
$tableSQL=rtrim($tableSQL,", ");
$tableSQL.=")";
$memdb->exec($tableSQL);
$pragmaSQL="PRAGMA table_info($tablename)";
$st2=$memdb->prepare($pragmaSQL);
$st2->execute();
$pragres=$st2->fetchAll(PDO::FETCH_ASSOC);
$insert = "INSERT INTO $tablename (".implode(",",$colnames).") ". 
"VALUES (:".implode(",:",$colnames).")";
$stmt = $memdb->prepare($insert);
foreach ($result as $row) {
  $parms=array();
  for($i=0;$i<count($colnames);$i++){
    $parms[':'.$colnames[$i]]=$row[$colnames[$i]];  // Bind parameters to statement variables
  }
  $stmt->execute($parms);
}                       
$strSQL="SELECT sum(customers_id) FROM $tablename";
$sth=$memdb->prepare($strSQL);
$sth->execute();
$result2=$sth->fetchAll(PDO::FETCH_ASSOC);
foreach ($result2 as $m) {
  echo print_r($m,true);
}
$memdb->exec("DROP TABLE $tablename");
$memdb = null;

}catch(PDOException$e){echo$e->getMessage();error_log($e->getMessage());}我不确定这是否是最好的答案,但这是一个开始——急于看到别人的意见!