尝试在需要soundex()的情况下构建功能测试失败,因为默认情况下该函数未在pdo_sqlite中编译。正在使用LiipFunctionalTestBundle构建功能测试。
报告的错误是:
PDOException:SQLSTATE [HY000]:一般错误:1没有这样的功能: 探测法
并且SQLite文档说:
默认情况下,SQLite中省略了soundex(X)函数...
我已尝试(来自php docs)$db->sqliteCreateFunction('soundex', 'sqlite_soundex', 1);
其中
function sqlite_soundex($string)
{
return soundex($string);
}
但是
... sqlite_soundex不可调用...
那么,如何编译Windows php_pdo_sqlite.dll
的版本? (SQLite文档展示了如何编译" plain" sqlite.dll。)或者是否有更好的解决方案?
>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
答案 0 :(得分:0)
soundex()
函数添加到php_pdo_sqlite.dll 以下是对说明Build your own PHP on Windows的修改。我使用Visual Studio 12 Express for Desktop&来自windows.php.net的PHP 5.5源代码。
按照说明继续将源代码提取到树中。那时我修改了C:\php-sdk\phpdev\vc9\x86\php-5.5.18\ext\pdo_sqlite\config.w32
,添加了/D SQLITE_SOUNDEX
// $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允许测试通过。的 SUCCESS!强>
尝试多次失败后,将上面的第14步更改为configure --disable-all --enable-pdo --with-pdo-sqlite=shared --enable-apache2-4handler
,可以使用php_pdo_sqlite.dll
功能创建soundex()
。