передать переменную в php eval () - PullRequest
3 голосов
/ 26 мая 2011

Я использую функцию php eval (), ниже приведены мои утверждения:

$uid = 8;
$str = 'SELECT COUNT(*) FROM uchome_blog WHERE uid=$uid';
eval("\$str = \"$str\"");
die("$str");
//$query = $_SGLOBAL['db']->query($str);
//$result = $_SGLOBAL['db']->fetch_array($query);

Вывод: SELECT COUNT (*) FROM uchome_blog WHERE uid = $ uid То есть переменная $ uidне прошел.Как передать переменную в вычисляемую строку.Спасибо.

Ответы [ 4 ]

1 голос
/ 19 января 2018

В соответствии с руководством php: http://php.net/manual/en/function.eval.php

Код будет выполнен в объеме кода, вызывающего eval (). Таким образом, любые переменные, определенные или измененные в вызове eval (), останутся видимый после того, как это заканчивается.

Итак, если необходимая переменная определена в области, в которой вы вызываете eval(), все должно работать как положено.

1 голос
/ 26 мая 2011

Вы не можете вставлять переменную непосредственно в строки в одинарных кавычках. попробуйте это:

$str = "SELECT COUNT(*) FROM uchome_blog WHERE uid=$uid"; // double-quotet

или это:

$str = 'SELECT COUNT(*) FROM uchome_blog WHERE uid='.$uid; // string-concatenation
0 голосов
/ 01 декабря 2014

Вам не хватает точки с запятой.Попробуйте это:

eval("\$str = \"$str\";");
0 голосов
/ 26 мая 2011

Подстановка переменных работает только в двойных кавычках.

Попробуйте это:

$uid = 8;
$str = "SELECT COUNT(*) FROM uchome_blog WHERE uid=$uid"; # variable gets substituted here
eval("\$str = \"$str\"");
die("$str");

Я думаю, что подстановка переменных - это то, что происходит во время разбора - это не делается рекурсивно, поэтому в вашем eval содержимое $str вставляется в строку, но это не делается во второй раз содержимое $uid внутри $str.

...