php - 如何在 Mac 上本地安装 SQLite 扩展?

标签 php macos sqlite php-extension

我对安装扩展程序一无所知。我陷入困境,因为我无法在 SQLite 中使用 SQRT。

我正在本地计算机上使用 Laravel,并且正在进行 PHPunit 测试。在一项测试中,我使用带有一些繁重数学函数的查询。

我收到错误:

Caused by
PDOException: SQLSTATE[HY000]: General error: 1 no such function: SQRT

我发现SQLite有一个扩展名为:extension-functions.c

我下载了它,但我不确定我是否正确执行了所有操作(显然不是因为它不起作用):

  1. 我下载了它并在我的终端中使用了它

    gcc -fno-common -dynamiclib extension-functions.c -o libsqlitefunctions.dylib
    
  2. 它编译了此数据:libsqlitefunctions.dylib
  3. 使用 php --ini 如果发现我的 php.ini 位于/usr/local/etc/php/7.1/php.ini
  4. 现在我查找 sqlite3 并发现此评论;sqlite3.extension_dir =
  5. 我把它改成了

    sqlite3.extension_dir =/usr/local/etc/php/7.1/extension/libsqlitefunctions.dylib
    
  6. 并创建扩展文件夹并将dylib文件放入其中

  7. 我使用 sudo apachectl restart 重新启动了我的 apache

  8. 尝试了我的查询,但仍然失败。我做错了什么?

对于 future 的读者

要在 Laravel 中使用它,您可以这样调用它:

$pdo = DB::connection()->getPdo();
$pdo->sqliteCreateFunction('SQRT', 'sqrt', 1);
$pdo->sqliteCreateFunction('ASIN', 'asin', 1);
$pdo->sqliteCreateFunction('SIN', 'sin', 1);
$pdo->sqliteCreateFunction('COS', 'cos', 1);
$pdo->sqliteCreateFunction('POWER', 'pow', 2);
$pdo->sqliteCreateFunction('pi', 'pi', 0);

最佳答案

您似乎想将其与 PDO 一起使用。问题是加载扩展只能直接与 SQLite3 api 一起使用,使用 SQLite3::loadExtension方法。

PDO 驱动程序不允许加载扩展(请参阅“安全注意事项”下的 this wiki entry regarding LoadableExtensions)。

因此,您可以直接切换到 SQLite3 api,也可以使用 PDO 的“用户定义函数”。例如,如果您需要 SQRT 函数:

$db = new PDO('sqlite:testdb.sqlite', null, null, [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]);

$db->sqliteCreateFunction('SQRT', 'sqrt', 1);

$stmt = $db->query("SELECT sqrt(25)");
foreach ($stmt as $row) {
    echo $row[0], PHP_EOL; // output: 5.0
}

您的扩展提供的大多数数学函数都与 PHP 函数名称(如 sqrt)一一对应,因此创建您需要的函数应该很容易。

关于php - 如何在 Mac 上本地安装 SQLite 扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50911676/

相关文章:

android - 为 Android sqlite 数据库使用自定义文件

php - WAMP 服务器 404

javascript - 将文本区域数据发送到数据库时出现问题

php - 在 Laravel Eloquent 中更新一对多关系

bash - 如何在 Mac OS 文件的第一行之前插入文本

php - 在 MAC/MAMP 10.8.4 上使用 PECL 安装 PHP gnupg

c# - Xamarin 安卓 C# SQLite

iPhone 在运行时创建 SQLite 数据库?

PHP header - 内容类型 : image/jpeg - Not working for Internet Explorer

macos - NSOutlineView MoveItemAtIndex 不动画