darkterminal/libsql-php-ext

该包已被废弃且不再维护。没有建议的替代包。

PHP 的 LibSQL 本地扩展

v1.0.1 2024-05-19 05:14 UTC

This package is auto-updated.

Last update: 2024-07-12 21:11:36 UTC


README

此存储库不再维护,并已迁移至
官方 Turso 数据库 存储库下的 Turso 客户端 PHP

LibSQL PHP Extension

PHP 的 LibSQL 扩展
LibSQL 客户端 PHP 的核心依赖

要求

  • Linux 或 Darwin OS
  • C/C++ 编译器
  • jq
  • Rust 已安装
  • PHP 已安装
  • FFI 扩展已启用(原因:我已从包装器读取 C 头定义)

🚨 不要担心要求 🚨

安装此扩展时,一切都会准备好。但如果遇到错误,请创建一个问题。

如何尝试?

安装

composer require darkterminal/libsql-php-ext

💡 使用示例和可用功能

<?php

use Darkterminal\LibSQLPHPExtension\LibSQLPHP;

require_once 'vendor/autoload.php';

$db = new LibSQLPHP("file:database.db");
if ($db->is_connected()) {
    echo $db->version() . PHP_EOL;
}
$db->close(); // Always close the database connection

执行

$db->exec("CREATE TABLE users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT)");
$db->exec("INSERT INTO users (name) VALUES ('Handoko')");
$db->exec("INSERT INTO users (name) VALUES ('Karlina')");

执行批量操作

方便地运行多个 SQL 语句(不能接受任何参数)的方法。

$db->execute_batch("
    BEGIN;
    CREATE TABLE foo(x INTEGER);
    CREATE TABLE bar(y TEXT);
    COMMIT;
");

获取最后一个插入 ID

var_dump($db->last_insert_rowid());

查询数据库

$result = $db->query("SELECT * FROM users LIMIT 5");

以原始格式返回

echo "Return as raw:" . PHP_EOL;
var_dump($result->fetchRaw());

// Result
// array(2) {
//   ["columns"]=>
//   array(2) {
//     ["name"]=>
//     string(4) "Text"
//     ["id"]=>
//     string(7) "Integer"
//   }
//   ["rows"]=>
//   array(5) {
//     [0]=>
//     array(2) {
//       [0]=>
//       string(5) "Randi"
//       [1]=>
//       int(1)
//     }
//     [1]=>
//     array(2) {
//       [0]=>
//       string(4) "Ando"
//       [1]=>
//       int(2)
//     }
//     [2]=>
//     array(2) {
//       [0]=>
//       string(4) "Danu"
//       [1]=>
//       int(3)
//     }
//     [3]=>
//     array(2) {
//       [0]=>
//       string(10) "Rani Karni"
//       [1]=>
//       int(4)
//     }
//     [4]=>
//     array(2) {
//       [0]=>
//       string(6) "Rumana"
//       [1]=>
//       int(5)
//     }
//   }
// }

获取结果

获取结果行作为关联数组、数字索引数组或两者都有的形式,如 SQLite3。默认为 LIBSQLPHP_BOTH,其他选项为:LIBSQLPHP_ASSOCLIBSQLPHP_NUM

获取默认值

echo "Return as default (LIBSQLPHP_BOTH):" . PHP_EOL;
$users = $result->fetchArray();

var_dump($users);
// array(5) {
//   [0]=>
//   array(4) {
//     ["id"]=>
//     int(1)
//     [0]=>
//     int(1)
//     ["name"]=>
//     string(5) "Randi"
//     [1]=>
//     string(5) "Randi"
//   }
//   [1]=>
//   array(4) {
//     ["id"]=>
//     int(2)
//     [0]=>
//     int(2)
//     ["name"]=>
//     string(4) "Ando"
//     [1]=>
//     string(4) "Ando"
//   }
//   [2]=>
//   array(4) {
//     ["id"]=>
//     int(3)
//     [0]=>
//     int(3)
//     ["name"]=>
//     string(4) "Danu"
//     [1]=>
//     string(4) "Danu"
//   }
//   [3]=>
//   array(4) {
//     ["id"]=>
//     int(4)
//     [0]=>
//     int(4)
//     ["name"]=>
//     string(10) "Rani Karni"
//     [1]=>
//     string(10) "Rani Karni"
//   }
//   [4]=>
//   array(4) {
//     ["id"]=>
//     int(5)
//     [0]=>
//     int(5)
//     ["name"]=>
//     string(6) "Rumana"
//     [1]=>
//     string(6) "Rumana"
//   }
// }

获取关联

echo "Return as default (LIBSQLPHP_ASSOC):" . PHP_EOL;
$users = $result->fetchArray(LIBSQLPHP_ASSOC);

var_dump($users);
// array(5) {
//   [0]=>
//   array(2) {
//     ["id"]=>
//     int(1)
//     ["name"]=>
//     string(5) "Randi"
//   }
//   [1]=>
//   array(2) {
//     ["id"]=>
//     int(2)
//     ["name"]=>
//     string(4) "Ando"
//   }
//   [2]=>
//   array(2) {
//     ["id"]=>
//     int(3)
//     ["name"]=>
//     string(4) "Danu"
//   }
//   [3]=>
//   array(2) {
//     ["id"]=>
//     int(4)
//     ["name"]=>
//     string(10) "Rani Karni"
//   }
//   [4]=>
//   array(2) {
//     ["id"]=>
//     int(5)
//     ["name"]=>
//     string(6) "Rumana"
//   }
// }

获取数字

echo "Return as default (LIBSQLPHP_NUM):" . PHP_EOL;
$users = $result->fetchArray(LIBSQLPHP_NUM);

var_dump($users);
// array(5) {
//   [0]=>
//   array(2) {
//     [0]=>
//     string(5) "Randi"
//     [1]=>
//     int(1)
//   }
//   [1]=>
//   array(2) {
//     [0]=>
//     string(4) "Ando"
//     [1]=>
//     int(2)
//   }
//   [2]=>
//   array(2) {
//     [0]=>
//     string(4) "Danu"
//     [1]=>
//     int(3)
//   }
//   [3]=>
//   array(2) {
//     [0]=>
//     string(10) "Rani Karni"
//     [1]=>
//     int(4)
//   }
//   [4]=>
//   array(2) {
//     [0]=>
//     string(6) "Rumana"
//     [1]=>
//     int(5)
//   }
// }

查询单个

$result = $db->querySingle("SELECT name FROM users WHERE id = 1");
$result2 = $db->querySingle("SELECT name FROM users WHERE id = 2", true);
var_dump($result);
// string(5) "Randi"
var_dump($result2);
// array(1) {
//   ["name"]=>
//   string(4) "Ando"
// }

获取总列数

echo "Return the column count:" . PHP_EOL;
var_dump($result->numColumns());

获取列名

echo "Return the column names:" . PHP_EOL;
var_dump($result->columName());

获取列类型

echo "Return the column types:" . PHP_EOL;
var_dump($result->columnType());

参数绑定

bindParam

$stmt = $db->prepare("INSERT INTO persons (name, age) VALUES (:name, @age)");

// Bind parameters
$stmt->bindParam(':name', $baz, LIBSQLPHP_TEXT);
$stmt->bindParam('@age', $foo, LIBSQLPHP_INTEGER);
$baz = "Sarah";
$foo = 22;
$stmt->execute();

bindValue

$stmt = $db->prepare('INSERT INTO foo VALUES (?)');

$age = 18;
$stmt->bindValue(1, $age, LIBSQLPHP_INTEGER);
$stmt->execute();

准备查询有什么?

prepare 查询返回一个包含其他方法的 LibSQLPHPStmt 对象。

  • bindParam - 将 PHP 变量绑定到预处理语句中的参数。
  • bindValue - 将值绑定到预处理语句中的参数。
  • execute - 执行带有绑定参数的预处理语句。
  • getSQL - 获取用参数值替换的 SQL 查询字符串。
  • paramCount - 获取预处理语句中的参数数量。
  • readOnly - 检查预处理语句是否为只读。
  • reset - 重置预处理语句,清除绑定的参数。
  • clear - 清除预处理语句中绑定的参数的值。
  • close - 关闭预处理语句,释放资源。

事务

$operations_successful = false;
$tx = $db->transaction(TransactionBehavior::Deferred);
$tx->exec("INSERT INTO users (name) VALUES (?)", ["Emanuel"]);
$tx->exec("INSERT INTO users (name) VALUES (?)", ["Darren"]);

if ($operations_successful) {
    $tx->commit();
    echo "Commit the changes" . PHP_EOL;
} else {
    $tx->rollback();
    echo "Rollback the changes" . PHP_EOL;
}

注意:在 commitrollback 之后,$tx 将从内存中释放。

如果此库对您有用,并希望支持我的工作,请为您所信的上帝祈祷,愿您和我永远健康、生活幸福,或者您也可以成为我的 GitHub 赞助者。

Regard,

.darkterminal 
(Software Freestyle Engineer - 🇮🇩)