PHP不解析双引号内的变量
我有以下疑问:PHP不解析双引号内的变量,php,mysql,parsing,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) 当我将$id更改为硬编码值(51)时,它会起作用: $sql = "SELECT
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)
当我将$id更改为硬编码值(51)时,它会起作用:
$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.构建的。而不是像这样编写查询
$sql = "SELECT * FROM table WHERE id=$id";
您也可以使用此选项
$sql = "SELECT * FROM table WHERE id='".$id."'";
而不是像这样写查询
$sql = "SELECT * FROM table WHERE id=$id";
您也可以使用此选项
$sql = "SELECT * FROM table WHERE id='".$id."'";
请用这个:
SELECT * FROM table WHERE `id` = $id
在id的两侧插入`
请用这个:
SELECT * FROM table WHERE `id` = $id
在id的两侧插入`
寄存器\u全局已关闭。我知道安全问题,但我有它自己的虚拟服务器,现在还没有时间来修复它 在htaccess中:
php_flag register_globals on
寄存器\u全局已关闭。我知道安全问题,但我有它自己的虚拟服务器,现在还没有时间来修复它 在htaccess中:
php_flag register_globals on
除此之外,查询应该被转义(在本例中,转换为整数就足够了),或者最好通过准备好的语句创建,我猜想是查询失败了
PHP从一开始就解析了双引号字符串,所以请尝试输出
$sql
的值,以查看发送到MySQL的内容。除此之外,查询应该转义(在这种情况下,转换为整数就足够了),或者最好通过准备好的语句创建,我猜是这个查询失败了
PHP从一开始就解析了双引号字符串,因此请尝试输出
$sql
的值,以查看发送到MySQL的内容。是否尝试了一些错误处理?使用mysql_error函数是一种选择。似乎没有返回任何错误。PHP版本:PHP5.2该站点是为版本4.something构建的。您如何检查是否返回了错误?另外,您首先是如何获得$id
的?用户输入,然后清除变量?或者,$id
从何而来?您确定它包含ASCII 53/49吗?在查询中使用它之前,请尝试将其强制转换为int-首先,查看var\u dump((int)$id)中的内容
提供给您,然后尝试将查询字符串更改为$sql=“SELECT*FROM table WHERE id=”((int)$id)代码>是否尝试了一些错误处理?使用mysql_error函数是一种选择。似乎没有返回任何错误。PHP版本:PHP5.2该站点是为版本4.something构建的。您如何检查是否返回了错误?另外,您首先是如何获得$id
的?用户输入,然后清除变量?或者,$id
从何而来?您确定它包含ASCII 53/49吗?在查询中使用它之前,请尝试将其强制转换为int-首先,查看var\u dump((int)$id)中的内容
提供给您,然后尝试将查询字符串更改为$sql=“SELECT*FROM table WHERE id=”((int)$id)如果这真的是问题所在,你的问题是误导性的。您是否真的验证了变量包含51,或者您只是在编写查询时虚构出来的?如果这真的是问题所在,您的问题是误导性的。您是否真的验证了变量包含51,还是在编写查询时编写的?