отсутствуют значения переменных - PullRequest
0 голосов
/ 07 июня 2011

У меня есть следующее в поле базы данных

id = id,
Xterminal = 1234,
Testdata = 1234',
date BETWEEN $Date1 AND  $Date2,
MyVar = $myVar;

Я хочу использовать его в своем выражении sql. В моем сценарии над оператором sql установлено $ Date1 = '2011-01-09' и $ Date2 = '2011-03-09'. У меня $ myvar setup до $ myVar = 3. Но он не конвертирует переменные в sql, и когда я выполняю print_r на $ sql, он показывает переменные, и даже в запросе он показывает переменные, а не их значения

Я делаю следующее

$conditions = explode(',',$results['conditions']);   

print_r ($ condidtions) дает

Массив ( [0] => id = id [1] => Xterminal = 1234 [2] => Testdata = 1234 [3] => дата между $ Date1 и $ Date2 [3] => MyVar = $ myVar;

)

$sql1 = "Select * from table where ";
$sql2 = implode(' AND ',$conditions);

$sql = $Sql1.' '.$sql2;

print_r ("$ sql") дает

ВЫБРАТЬ * ОТ

таблица ГДЕ id = id AND Xterminal = 1234 А Тестданные = 1234 А дата между $ Date1 и $ Date2 AND MyVar = $ myVar;

Не уверен, почему не принимаются значения переменных, которые я определил alreadt в сценарии

Ответы [ 2 ]

1 голос
/ 07 июня 2011

Похоже, вы говорите, что строка date BETWEEN $Date1 AND $Date2, пришла из базы данных.Если это так, то ваши переменные не оцениваются, потому что это просто данные ...

Вы можете использовать eval (), но это опасный путь, если пользователи могут создать эти условия.

$conditions = explode(',',$results['conditions']);
for ($x = 0; $x < count($conditions); $x++) {
    eval("\$conditions[\$x] = \"" . $conditions[$x] . "\";");
}
print_r($conditions);

Редактировать: Я собрал рабочий пример PHP для этого, видимый в http://gfosco.kodingen.com/conditions.php, и вот источник:

<?php

$conditions = array("date BETWEEN '\$Date1' AND '\$Date2',");

echo "\$conditions before the loop: <BR>";
var_dump($conditions);

$Date1 = '1/1/2011';
$Date2 = '12/31/2011';

echo "<BR>\$Date1 = " . $Date1 . "<BR>";
echo "\$Date2 = " . $Date2 . "<BR>";

for ($x = 0; $x < count($conditions); $x++) {
    eval("\$conditions[\$x] = \"" . $conditions[$x] . "\";");
}

echo "<BR>\$conditions after the loop:<BR>";
var_dump($conditions);

Это выводит:

$conditions before the loop: 
array(1) { [0]=> string(35) "date BETWEEN '$Date1' AND '$Date2'," } 
$Date1 = 1/1/2011
$Date2 = 12/31/2011

$conditions after the loop:
array(1) { [0]=> string(41) "date BETWEEN '1/1/2011' AND '12/31/2011'," }
0 голосов
/ 07 июня 2011

Может быть, попробуйте это:

date BETWEEN {$Date1} AND  {$Date2},

Не уверен, что это будет работать, так как я не могу видеть, как ваши переменные установлены в вашем скрипте.

...