我只是将代码从 mysql_query 样式命令迁移到 PDO 样式,但遇到了问题。旧代码如下所示:
$query_list_menu = "SELECT ".$_GET['section_name']." from myl_menu_hide_show WHERE id='".$_GET['id']."'";
更新后的代码如下所示。显然它不起作用。我存储在$_GET['section_name']
表示数据库中字段名称的字符串。但我认为当我将它作为变量传递时存在问题。下面的代码有效吗?谢谢。
$query_list_menu = "SELECT :section_name from myl_menu_hide_show WHERE id=:id";
$result_list_menu = $db->prepare($query_list_menu);
$result_list_menu->bindValue(':section_name', $_GET['section_name'] , PDO::PARAM_STR);
$result_list_menu->bindValue(':id', $_GET['id'] , PDO::PARAM_INT);
$result_list_menu->execute();
If $_GET['section_name']
包含列名,您的查询应该是:
$query_list_menu = "SELECT " . $_GET['section_name'] . " from myl_menu_hide_show WHERE id=:id";
Giving:
$query_list_menu = "SELECT :section_name from myl_menu_hide_show WHERE id=:id";
$result_list_menu = $db->prepare($query_list_menu);
$result_list_menu->bindValue(':id', $_GET['id'] , PDO::PARAM_INT);
$result_list_menu->execute();
原因是您希望列的实际名称出现在查询中 - 您已将其更改为参数,这实际上没有多大意义。
我还将添加使用$_GET['section_name']
直接这样会带来巨大的安全风险,因为它允许 SQL 注入。我建议您验证以下值$_GET['section_name']
通过在构建和执行查询之前对照列列表进行检查。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)