Как придать значение переменной, присутствующей в строке, если эта строка также является строковой переменной?
У меня есть переменная $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: отсутствует выражение
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));
Присвойте значение переменной, прежде чем использовать ее в строковом литерале. Строковые литералы в двойных кавычках затем автоматически расширят переменные, используемые внутри строкового литерала в двойных кавычках.
$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;
Нет, это невозможно. Когда строка вычисляется, определяется ее значение, даже если для этого вы использовали переменную, а затем переменная изменяется. Вы пытаетесь оптимизировать способ создания строки, но вы преждевременно оптимизируете. Генерация строки в вашем случае будет быстрой, по крайней мере, по сравнению с вашим запросом. Вы могли бы минимизировать количество запросов, генерируемых таким образом:
$cachedQueryTexts = array();
function generateQueryText($key) {
return (isset($cachedQueryTexts[$key])) ? $cachedQueryTexts[$key] : ($cachedQueryTexts[$key] = "your query using the $key variable");
}