Как придать значение переменной, присутствующей в строке, если эта строка также является строковой переменной?


У меня есть переменная $query1, и в ней у меня есть строка запроса, и в этой строке запроса я использовал другую переменную $sORp. Основная проблема заключается в том, что я хочу присвоить этой переменной $sORp значение во время выполнения без изменения моей строковой переменной, содержащей запрос. Возможно ли это?

Фрагмент кода, как показано ниже (фиктивный пример):

$query1="SELECT $sORP,name from table1 
    where $sORp=:SRC_NAME 
    group by $sORp,name 
    order by $sORp";

Я хочу назначить этой переменной $sORp "SRC" и "ПУЛ" во время выполнения, так как я не хочу писать запрос дважды с разными ценности.

Использование в коде:

$sORp='SRC';
$sql=$query1;
$sth = oci_parse($con,$sql);

И это не работает, есть ли какое-либо решение для этого.

И при запуске этого PHP-файла ошибка: ORA-00936: отсутствует выражение

 2
Author: Lajos Arpad, 2017-09-04

3 answers

Вы не можете сделать это на этом языке сценариев. $sql должно быть определено после $sORp .

$sORp='SRC';
$sth = oci_parse($con,"SELECT $sORP,name from table1 
                        where $sORp=:SRC_NAME 
                     group by $sORp,name 
                     order by $sORp");

Если вы хотите, вы можете создать функцию , которая сгенерирует правильный запрос на will:;

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));
 1
Author: J. Chomel, 2017-09-04 08:57:21

Присвойте значение переменной, прежде чем использовать ее в строковом литерале. Строковые литералы в двойных кавычках затем автоматически расширят переменные, используемые внутри строкового литерала в двойных кавычках.

$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
Author: RiggsFolly, 2017-09-04 08:57:20

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

$cachedQueryTexts = array();
function generateQueryText($key) {
    return (isset($cachedQueryTexts[$key])) ? $cachedQueryTexts[$key] : ($cachedQueryTexts[$key] = "your query using the $key variable");
}
 1
Author: Lajos Arpad, 2017-09-04 08:58:46