我希望我的应用程序根据它运行在本地计算机,登台环境还是生产环境上,动态更改它使用的数据库和架构名称。我认为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将是占位符的值(由条件逻辑确定)。