我有一个变量$query1
,在这里,我有一个查询字符串,在这个查询字符串中,我使用了另一个变量$sORp
。主要问题是我想在运行时给这个$sORp
变量一个值而不用改变我持有查询的字符串变量。这可能吗?
代码段如下(虚拟示例):
$query1="SELECT $sORP,name from table1
where $sORp=:SRC_NAME
group by $sORp,name
order by $sORp";
我想在运行时分配此变量$sORp
“SRC”和“POOL”,因为我不想用不同的值写两次查询。
在代码中使用
$sORp='SRC';
$sql=$query1;
$sth = oci_parse($con,$sql);
这不起作用,有没有解决方案。
在运行此PHP文件时,错误是: ORA-00936:表达式缺失
答案 0 :(得分:1)
在字符串文字中使用之前为变量赋值。双引号字符串文字将自动扩展双引号字符串文字中使用的变量。
$sORp='SRC';
$query1="SELECT $sORP,name from table1
where $sORp=:SRC_NAME
group by $sORp,name
order by $sORp";
echo $query1;
// run query
$sORp='POOL';
$query1="SELECT $sORP,name from table1
where $sORp=:SRC_NAME
group by $sORp,name
order by $sORp";
echo $query1;
答案 1 :(得分:1)
您无法在此脚本语言中执行此操作。必须在$sql
之后定义$sORp
。
$sORp='SRC';
$sth = oci_parse($con,"SELECT $sORP,name from table1
where $sORp=:SRC_NAME
group by $sORp,name
order by $sORp");
如果您希望自己可以创建一个function,它会生成正确的查询:;
function foo($sORp) {
$retVal="SELECT $sORP,name from table1
where $sORp=:SRC_NAME
group by $sORp,name
order by $sORp";
return $retVal;
}
$sth = oci_parse($con,foo($sORp));
答案 2 :(得分:1)
不,这是不可能的。在计算字符串时,即使您使用变量执行此操作并稍后更改该变量,也会确定其值。您尝试优化生成字符串的方式,但过早优化。在您的情况下,字符串生成将很快,至少与您的查询相比。您可以通过这种方式最小化生成的查询数量:
$cachedQueryTexts = array();
function generateQueryText($key) {
return (isset($cachedQueryTexts[$key])) ? $cachedQueryTexts[$key] : ($cachedQueryTexts[$key] = "your query using the $key variable");
}