我有这个问题。
我需要从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
我该怎么做?
谢谢
答案 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所示。除此以外;如果你有可能在双引号中包含字符串,那么这种错综复杂的解决方案将完全无关紧要。