pg_query_params не подставляет параметры в запрос

Я хочу, чтобы мое приложение динамически изменяло, какую базу данных и имя схемы оно использует, в зависимости от того, работает ли оно на локальном компьютере, в промежуточной среде или в рабочей среде. Я подумал, что pg_query_params будет отличным выбором, потому что вы можете динамически подставлять вещи в свои запросы, параметризуя их. Идея в том, что имя схемы будет динамически вставлено в запрос. Но pg_query_params (), похоже, не подставляет значения в массив, вызывая синтаксическую ошибку запроса.

Я проверил, что сам запрос действителен, используя pg_query и жестко закодировав имя схемы вместо ее параметризации. Когда я просматриваю логи, я вижу следующую ошибку:

Предупреждение PHP: pg_query_params (): сбой запроса: ОШИБКА: синтаксическая ошибка на уровне или около $ 1. Строка 2 ОТ $ 1.module__c

Итак, ясно, что pg_query_params на самом деле не подставляет параметры (по крайней мере, из того, что я вижу)

В результате pg_query_params () возвращает false и разрывает всю страницу.

Сначала код получает массив из моей функции databaseInfo () (он возвращает массив для имени схемы и ресурса соединения. Я убедился, что эта часть моего кода работает и возвращает ожидаемую информацию.

$database = databaseInfo();
if (isset($projSFID)) {
$placeholder = $projSFID;
$query = "SELECT $1.module__c.name, $1.module__c.module_title__c, $1.module__c.number_of_units__c, $1.module__c.duration_minutes__c, $1.module__c.module_bg_hex__c, $1.module__c.module_description__c, $1.lms_asset__c.lms_asset_url__c
FROM $1.module__c
INNER JOIN $1.teproject__c ON $1.module__c.associated_project__c = $1.teproject__c.sfid
INNER JOIN $1.lms_asset__c ON $1.module__c.module_image_url__c = $1.lms_asset__c.sfid
WHERE $1.teproject__c.sfid = $2 AND $1.module__c.published__c=TRUE";
} elseif (isset($trackSFID)) {
$placeholder = $trackSFID;
$query = "SELECT $1.module__c.name, $1.module__c.module_title__c, $1.module__c.number_of_units__c, $1.module__c.duration_minutes__c, $1.module__c.module_bg_hex__c, $1.module__c.module_description__c, $1.lms_asset__c.lms_asset_url__c
FROM $1.module_track_association__c
INNER JOIN $1.module__c ON $1.module_track_association__c.module__c = $1.module__c.sfid
INNER JOIN $1.track__c ON $1.module_track_association__c.track__c = $1.track__c.sfid
INNER JOIN $1.lms_asset__c ON $1.module__c.module_image_url__c = $1.lms_asset__c.sfid
WHERE $1.track__c.sfid = $2
ORDER BY $1.module_track_association__c.navigation_sequence__c";
} else {
$placeholder = '';
$query = "SELECT $1.module__c.name, $1.module__c.module_title__c, $1.module__c.number_of_units__c, $1.module__c.duration_minutes__c, $1.module__c.module_bg_hex__c, $1.module__c.module_description__c, $1.lms_asset__c.lms_asset_url__c
FROM $1.module__c
INNER JOIN $1.lms_asset__c ON $1.module__c.module_image_url__c = $1.lms_asset__c.sfid
WHERE $1.module__c.published__c=TRUE AND $1.module__c.display_on_frontend_filtered_only__c=FALSE $2";
echo $query;
}

$result = pg_query_params($database['connection'], $query, array($database['schema'],$placeholder));

Ожидаемый результат состоит в том, что $ 1 будет именем схемы, а $ 2 будет значением заполнителя, как определено условной логикой.

0

Решение

Задача ещё не решена.

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

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

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