PHP没有在双引号内解析变量

时间:2012-02-06 11:36:46

标签: php mysql parsing

我有以下查询:

var_dump($id); // string '51' (length=2)


$sql    = "SELECT * FROM table WHERE id=$id";

$result = mysql_query($sql, $db);

$myrow  = mysql_fetch_array($result);

var_dump($myrow) // null (NOT OK)

当我更改硬编码值(51)的$ id时,它可以工作:

$sql    = "SELECT * FROM table WHERE id=51";

$result = mysql_query($sql, $db);

$myrow  = mysql_fetch_array($result);

var_dump($myrow); // array 0 => string '51' (length=2) (OK)

好像$ sql没有被正确解析。这是一个非常古老的网站,它可能与网站最初创建的PHP版本有关吗?

$sql = "SELECT * FROM table WHERE id=".$id; 
// ALSO WORKS. But I am not really looking forward to doing a FIND & REPLACE

修改

该网站有数百种这类查询。这是一个古老的网站,是我的别人开发的。我想知道是否有一个INI设置或在PHP版本之间切换的东西,我可以切换回来。

由于

PHP版本:PHP5.2

该网站是针对版本4.something构建的。

4 个答案:

答案 0 :(得分:0)

而不是像这样编写查询

$sql = "SELECT * FROM table WHERE id=$id";

你也可以使用这个替代品。

$sql = "SELECT * FROM table WHERE id='".$id."'";

答案 1 :(得分:0)

请使用此:

SELECT * FROM table WHERE `id` = $id 
  

在id

的两侧插入`

答案 2 :(得分:0)

register_globals已关闭。我知道安全隐患,但我已经在自己的虚拟服务器上使用它,现在还没有时间来修复它。

在htaccess中:

php_flag register_globals on 

答案 3 :(得分:0)

除了事实之外,查询应该被转义(在这种情况下,转换为整数就足够了)或者最好通过预处理语句创建,我的猜测是查询失败。

PHP从一开始就解析了双引号字符串,因此请尝试输出$sql的值以查看发送给MySQL的内容。