php变量被视为字符串

时间:2016-11-11 14:17:50

标签: php

我有这个问题。

我需要从mysql数据库的comments列中收到如下字符串:

WHERE IDTable=$number

当我收到此评论时,我必须在查询中将其设置为Where子句。

但如果我写这段代码

$where=getComment($table,$field); //I get the string i wrote above
$number=5; //I initialize $number in my code
$sql="SELECT * FROM table $where";
print "SQL: $sql";

我明白了:

SELECT * FROM table WHERE IDTable=$number

显然我想作出回应:

SELECT * FROM table WHERE IDTable=5

我该怎么做?

谢谢

3 个答案:

答案 0 :(得分:0)

强烈怀疑您遇到问题的代码与上述代码不同,因为上述代码不会产生您所说的结果。至少你缺少你正在调用的函数的定义,以创建所述输出。

然而,产生这样结果的是通过在字符串周围使用单引号。哪个prevents variable expansion,并将它们视为常规字符串。

不仅如此,您的代码也不正常。在声明之前不能使用变量,因为它还不存在。

答案 1 :(得分:0)

getComment()返回的字符串将不会被解析,因此其中的任何PHP变量($number)都将作为文字字符串返回。

我可以想到两个选项 -

<强> 1
允许getComment()的额外参数,以便您可以传递$number

$number=5;
$where = getComment($table,$field,$number); // returns "WHERE IDTable=5"
$sql="SELECT * FROM table $where";

<强> 2
不要从$number返回getComment(),然后您可以在构建查询时添加它。

$where=getComment($table,$field); // returns "WHERE IDTable="
$number=5;
$sql="SELECT * FROM table $where $number";

答案 2 :(得分:0)

  

也许您从MySQL获得的字符串值:WHERE IDTable=$number可能已包含在单引号中。考虑下面的示例。

    $number             = 22;
    $str                = 'WHERE IDTable=$number';
    var_dump($str);     //<== YIELDS:: 'WHERE IDTable=$number' B'COS IT'S IN SINGLE QUOTES

    $parts              = explode("=", $str);
    list($where, $var)  = $parts;
    $var                = ltrim(trim($var), "\$");
    $newStr             = trim($where . "=" . $$var);

    var_dump($$var);    //<== YIELDS:: int 22
    var_dump($newStr);  //<== YIELDS:: 'WHERE IDTable=22' (length=16)
  

假设您的String就是这种情况;为了解决这个问题,您可能只想从String中提取变量,然后重建String,如上面的Snippet所示。除此以外;如果你有可能在双引号中包含字符串,那么这种错综复杂的解决方案将完全无关紧要。