Функциональный тест: sqlite не включает soundex ()

Попытки построить функциональный тест, в котором требуется soundex (), терпят неудачу из-за того, что функция по умолчанию не компилируется в pdo_sqlite. Функциональные тесты строятся с использованием LiipFunctionalTestBundle.

Сообщение об ошибке:

PDOException: SQLSTATE [HY000]: общая ошибка: 1 нет такой функции:
Саундэкс

и документация SQLite гласит:

Функция soundex (X) … по умолчанию исключена из SQLite

Я пробовал (из php документации) $db->sqliteCreateFunction('soundex', 'sqlite_soundex', 1); где

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

но получить

…sqlite_soundex не вызывается …

Итак, как скомпилировать версию Windows php_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

1

Решение

Как добавить soundex() функция php_pdo_sqlite.dll

Ниже приведена адаптация инструкций Создайте свой собственный PHP на Windows. Я использовал Visual Studio 12 Express для рабочего стола & Исходный код PHP 5.5 с windows.php.net.

Продолжайте в соответствии с инструкциями вплоть до извлечения исходного кода в дерево. В этот момент я изменил 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

Результатом стал php_pdo_sqlite.dll в каталоге … \ Release_TS

Мне нужно было обновить мою установку PHP с 5.4 до 5.5 и протестировать. Исходный DLL-файл sqlite вызвал ошибку soundex (). Замена DLL позволила пройти тест. УСПЕХ!

РЕДАКТИРОВАТЬ — для PHP 7.0.0

После нескольких неудачных попыток измените шаг 14 выше на configure --disable-all --enable-pdo --with-pdo-sqlite=shared --enable-apache2-4handler разрешено создание php_pdo_sqlite.dll с soundex() функция.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]