我可以在SQL查询的其他部分插入表单输入吗?

时间:2015-12-05 00:29:02

标签: php mysql sql mysqli

我正在尝试将表单值插入SQL查询中的表和列中,希望PHP将其值传递给MySQL。

像这样:

$sql= "SELECT * FROM  '{$table}' WHERE '{$catagory}' = '{$value}'";

那么有没有一种方法可以做这样的事情而不会出现语法错误?

3 个答案:

答案 0 :(得分:0)

你有没有试过这个

$sql= "SELECT * FROM  $table WHERE $catagory = '$value'";

或者如果您尝试从表单输入字段中进行选择,可以尝试这样

$sql= "SELECT * FROM $_POST[table] WHERE $_POST[category] = '$_POST[value]'";

请注意,第二个示例并不是将输入字段值插入查询的安全方法,因为有人可以SQL注入您的查询,所以您知道。

答案 1 :(得分:0)

是的,就像这样...

$sql= "SELECT * FROM $table WHERE $category ='$value'";

确保整个字符串都在双引号" "

我一直这样做,但是我使用准备好的陈述......你也应该这样做

答案 2 :(得分:0)

首先,让我免费声明您应该从不使用表单中的原始输入数据来确定查询中的数据库,表或列。这是个坏消息。创建某种映射,不会将数据库模式暴露给最终用户,并将值限制为只有您想要的值,并且不能被浏览器中的开发人员工具或试图破解您网站的机器人更改。

如果您想使用mysql执行此操作,则需要使用mysqli_real_escape_string来转义表单数据,以防止SQL injection。我使用sprintf使其更干净,但不是必需的。

$sql = sprintf(
    "SELECT * FROM `%s` WHERE `%s` ='%s'",
    mysqli_real_escape_string($table),
    mysqli_real_escape_string($column),
    mysqli_real_escape_string($value)
);

请注意表和列名称周围的反引号(`)。没有撇号a.k.a.单引号(')。它是在MySQL查询中封装数据库,表和列的正确方法。它有助于防止名称中包含特殊字符的问题。