我有以下查询:
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构建的。
答案 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的内容。