当此字符串也是字符串变量时,如何为字符串中的变量赋值?

时间:2017-09-04 08:45:40

标签: php oracle

我有一个变量$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:表达式缺失

3 个答案:

答案 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");
}