【问题标题】:variable values missing变量值缺失
【发布时间】:2011-06-07 18:27:51
【问题描述】:

我在数据库字段中有以下内容

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

我想在我的 sql 语句中使用它。我在 sql 语句上方的脚本中设置了 $Date1 = '2011-01-09' 和 $Date2 = '2011-03-09' 。 我将 $myvar 设置为 $myVar = 3。但它不会转换 sql 中的变量,当我在 $sql 上执行 print_r 时,它会显示变量,即使在查询中它也显示变量而不是它们的值

我在做以下事情

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

print_r($condidtions) 给出

数组 ( [0] => 身份证=身份证 [1] => X 终端 = 1234 [2] => 测试数据 = 1234 [3] => $Date1 和 $Date2 之间的日期 [3] => 我的变量 = $myVar;

)

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

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

print_r("$sql") 给出

选择 * 来自

表 在哪里 id = id 和 X 终端 = 1234 与 测试数据 = 1234 和 $Date1 和 $Date2 之间的日期和 我的变量 = $myVar;

不知道为什么它不采用我在脚本中定义的变量值

【问题讨论】:

    标签: php cakephp-1.3


    【解决方案1】:

    听起来你说的是字符串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'," }
    

    【讨论】:

    • 我在数据库中的变量周围尝试了 eval,但现在它打印 eval($myVar) 而不是 value..我错过了什么
    • @Autolycus 我整理了一个工作 PHP 示例,我所做的唯一更改是在日期变量周围加上单引号,否则它们在 SQL 查询中将无效。
    【解决方案2】:

    不妨试试这个:

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

    不确定它是否会起作用,因为我看不到您的变量在脚本中的设置方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-24
      • 1970-01-01
      • 2018-11-25
      • 1970-01-01
      • 2013-05-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多