1

由于默认情况下该函数未在 pdo_sqlite 中编译,因此尝试构建需要 soundex() 的功能测试失败。正在使用 LiipFunctionalTestBundle 构建功能测试。

报告的错误是:

PDOException:SQLSTATE [HY000]:一般错误:1 没有这样的功能:Soundex

SQLite 文档说:

soundex(X) 函数 ... 默认情况下从 SQLite 中省略

我试过(来自php docs)$db->sqliteCreateFunction('soundex', 'sqlite_soundex', 1);在哪里

    function sqlite_soundex($string)
    {
        return soundex($string);
    }

但得到

...sqlite_soundex 不可调用...

那么,如何编译一个版本的 Windowsphp_pdo_sqlite.dll呢?(SQLite 文档展示了如何编译“普通”sqlite.dll。)或者有更好的解决方案吗?

编辑 - 使用 MS Visual Studio 12 Express,编译时间选项未知!

>cl sqlite3.c  -SQLITE_SOUNDEX  -link -dll -out:php_pdo_sqlite.dll
Microsoft (R) C/C++ Optimizing Compiler Version 17.00.50727.1 for x86
Copyright (C) Microsoft Corporation.  All rights reserved.

cl : Command line warning D9002 : ignoring unknown option '-SQLITE_SOUNDEX'
sqlite3.c
Microsoft (R) Incremental Linker Version 11.00.50727.1
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:sqlite3.exe
-dll
-out:php_pdo_sqlite.dll
sqlite3.obj
4

1 回答 1

0

如何将soundex()函数添加到 php_pdo_sqlite.dll

以下是对在 Windows 上构建自己的 PHP说明的改编。我使用了来自 windows.php.net 的 Visual Studio 12 Express for Desktop 和 PHP 5.5 源代码。

继续按照说明将源代码提取到树中。那时我修改C:\php-sdk\phpdev\vc9\x86\php-5.5.18\ext\pdo_sqlite\config.w32了,添加/D SQLITE_SOUNDEX

config.w32 片段
// $Id$
// vim:ft=javascript

ARG_WITH("pdo-sqlite", "for pdo_sqlite support", "no");

if (PHP_PDO_SQLITE != "no") {
    EXTENSION("pdo_sqlite", "pdo_sqlite.c sqlite_driver.c sqlite_statement.c", null, "/DSQLITE_THREADSAFE=" + (PHP_ZTS == "yes" ? "1" : "0") + " /D SQLITE_ENABLE_FTS3=1 /D SQLITE_ENABLE_COLUMN_METADATA=1 /D SQLITE_CORE=1 /D SQLITE_SOUNDEX /I" + configure_module_dirname + "/../sqlite3/libsqlite /I" + configure_module_dirname);
    
    ADD_EXTENSION_DEP('pdo_sqlite', 'pdo');
    // If pdo_sqlite is static, and sqlite3 is also static, then we don't add a second copy of the sqlite3 libs
    if (PHP_PDO_SQLITE_SHARED || PHP_SQLITE3_SHARED || PHP_SQLITE3 == 'no') {
        ADD_SOURCES(configure_module_dirname + "/../sqlite3/libsqlite", "sqlite3.c", "pdo_sqlite");
    }
}

第 14 步:configure --disable-all --enable-cli --enable-pdo --with-pdo-sqlite=shared

第 15 步:nmake php_pdo_sqlite.dll

结果是 ...\Release_TS 目录中的 php_pdo_sqlite.dll

我需要将我的 PHP 安装从 5.4 更新到 5.5 并经过测试。原始 sqlite dll 导致 soundex() 错误。替换 dll 允许测试通过。 成功!

编辑 - 对于 PHP 7.0.0

在几次尝试失败后,将上面的第 14 步更改为configure --disable-all --enable-pdo --with-pdo-sqlite=shared --enable-apache2-4handler允许php_pdo_sqlite.dll使用该soundex()函数创建一个。

于 2014-11-16T14:55:14.447 回答