SQL 查询不知道变量



我正在尝试使用一个简单的下拉列表查询数据库中的一些表,其中列出了表的名称。 查询只有一个记录结果,显示在数据库中注册的最年轻机构的名称和年龄!

$table = $_GET['table'];
$query = "select max('$table'.est_year) as 'establish_year' from '$table' ";        

我需要将表的名称作为变量发送到查询器 php 文件。 无论方法在两种方式上都是 GET 或 POST,当我将变量名称放在查询语句中时,它都会给出错误:

"您的 SQL 语法有误;检查与您的MySQL服务器版本相对应的手册,了解在'.order)附近使用的正确语法,作为'客户'中的'最后'"

您将表名括在单引号中,这不是有效的 SQL(这是字符串的语法,而不是表名)。您根本不应该将名称包装起来,或者将其括在反引号中(在美式键盘布局上,这是 TAB 上方的键)。

您也不应该引用别名established_year

select max(`$table`.est_year) as establish_year from `$table`

此外,您的代码容易受到 SQL 注入的影响。立即修复此问题!

更新(sql 注入防御):

在这种情况下,最合适的操作可能是根据白名单验证表名:

if (!in_array($table, array('allowed_table_1', '...'))) {
    die("Invalid table name");
}

单引号('),在MySQL中,它表示字符串值。

SELECT *, 'table' FROM `table`;

演示

所以你的查询应该是

$table = $_GET['table'];
$query = "select max($table.est_year) as 'establish_year' from $table ";  

另请阅读旧帖子,phpmyadmin sql 撇号不起作用。

此外,您的代码容易受到 SQL 注入的攻击。你可以使用这样的东西

//Function to sanitize values received from the form. Prevents SQL injection
function clean($str) {
    $str = @trim($str);
    if(get_magic_quotes_gpc()) {
        $str = stripslashes($str);
    }
    return mysql_real_escape_string($str);
}
$firstName = clean($_POST['firstName']);
$lastName  = clean($_POST['lastName']);
.
.
.

相关内容

  • 没有找到相关文章

最新更新