pdo-pglite
pdo driver for pglite & php-wasm
pdo_pglite requires PHP 8.1+.
Pass the PGlite object into the php-wasm constructor to enable pdo_pglite support:
import { PGlite } from '@electric-sql/pglite';
const php = new PhpWeb({PGlite});
You can also load PGlite from a CDN:
import { PGlite } from 'https://cdn.jsdelivr.net/npm/@electric-sql/pglite/dist/index.js';
const php = new PhpWeb({PGlite});
Connect & Configure
Once PGlite is passed in, pgsql:
will be
available as a PDO driver.
import { PGlite } from 'https://cdn.jsdelivr.net/npm/@electric-sql/pglite/dist/index.js';
const php = new PhpWeb({PGlite});
.run(`<?php
php $pdo = new PDO('pgsql:idb-storage');
`);
Usage
Use pdo-pglite like you’d use any other PDO connector. Prepared statements, as well as positional & named placeholders are supported.
import { PGlite } from '@electric-sql/pglite';
const php = new PhpWeb({PGlite});
.run(`<?php
php $pdo = new PDO('pgsql:idb-storage');
$stm = $pdo->prepare(
'SELECT * FROM pg_catalog.pg_tables WHERE schemaname = :schema'
);
$out = fopen('php://stdout', 'w');
$stm->execute([
'schema' => 'pg_catalog'
]);
$headers = false;
while ($row = $stm->fetch(PDO::FETCH_ASSOC)) {
if (!$headers) {
fputcsv($out, array_keys($row));
$headers = true;
}
fputcsv($out, $row);
}
`);
PHP/PostgreSQL in Static HTML
PGlite can also be used right from static HTML. Just pass it
in the data-imports
attribute on the php script
tag, with the URL of the module as the key, where the value
lists the imports from that module as an array.
<script type = "text/php" data-imports = '{
"https://cdn.jsdelivr.net/npm/@electric-sql/pglite/dist/index.js": ["PGlite"]
}'>
You can see an example of this running in codepen:
https://codepen.io/SeanMorris227/pen/GRVqYzR?editors=1000
<html>
<body>
<script async type = "module" src = "./php-tags.mjs"></script>
<script type = "text/php" data-stdout = "#output" data-stderr = "#error" data-imports = '{
"https://cdn.jsdelivr.net/npm/@electric-sql/pglite/dist/index.js": ["PGlite"]
}'><?php
= new PDO('pgsql:idb-storage');
$pdo = $pdo->prepare(
$stm 'SELECT * FROM pg_catalog.pg_tables WHERE schemaname = :schema'
;
)= fopen('php://stdout', 'w');
$out
->execute([
$stm'schema' => 'pg_catalog'
;
])
= false;
$headers while ($row = $stm->fetch(PDO::FETCH_ASSOC)) {
if (!$headers) {
fputcsv($out, array_keys($row));
= true;
$headers
}fputcsv($out, $row);
}</script>
<pre id = "output"></pre>
<pre id = "error"></pre>
</body>
</html>
@electric-sql/pglite
pdo_pglite
is powered by @electric-sql/pglite.