【问题标题】:MYSQL assign column name to variable?MYSQL将列名分配给变量?
【发布时间】:2015-12-27 11:37:56
【问题描述】:

我有一个包含两列的数据库表,businesstourist

我要求用户从下拉列表中选择其中一个,然后在 MySQL 中的 SELECT 语句中使用结果。我将此列分配给$cclass,然后我做出此声明SELECT $cclass FROM flights ...

但它总是返回NULL。为什么它返回NULL,我该如何解决?

我的代码:

$check = mysql_query("SELECT $cclass FROM flights WHERE flight_no = '$flightno'");

while ($result = mysql_fetch_assoc($check))
{
    $db_seats = $result['$cclass']; 
}

【问题讨论】:

  • 你能显示更多的代码上下文吗,比如$cclass 是在哪里定义的?
  • 如果将最终的 sql 语句回显到屏幕上会是什么样子?
  • 在执行此操作之前要非常小心并确保您知道 $cclass 是一个实际的列名,否则您将面临 SQL 注入的风险

标签: php mysql


【解决方案1】:

你应该替换这一行:

$db_seats = $result['$cclass']; 

用这个:

$db_seats = $result[$cclass]; 

两个单引号之间的字符串不被解析: Strings

【讨论】:

  • 我想知道我怎么没有注意到这一点...我的错误已修复..谢谢.. +1 :)
【解决方案2】:

您是否尝试过以下操作:

$check = mysql_query("SELECT".$cclass." FROM flights WHERE flight_no = '$flightno'");

【讨论】:

    【解决方案3】:

    首先,此代码存在严重的安全问题,因为它容易受到SQL Injection 的攻击。您应该改用 MySQLi 扩展名,并正确过滤您的输入。

    试试这样的:

    <?php
    
    /* Create the connection. */
    $mysql = new mysqli("localhost", "username", "password", "myDB");
    if ($mysql->connect_error)
    {
        error_log("Connection failed: " . $mysql->connect_error);
        die("Connection failed: " . $mysql->connect_error);
    }
    
    /* Sanitize user input. */
    if (!in_array($cclass, array('business', 'tourist')))
    {
    
        error_log("Invalid input: Must be 'business' or 'tourist'");
        die("Invalid input: Must be 'business' or 'tourist'");
    }
    
    $statement = $mysql->stmt_init();
    $statement->prepare("SELECT $cclass FROM flights WHERE flight_no = ?");
    $statement->bind_param("s", $flightno);
    if (!$statement->execute())
    {
        error_log("Query failed: " . $statement->error);
        die("Query failed: " . $statement->error);
    }
    
    if ($statement->num_rows < 1)
    {
        echo "No results found.";
    }
    else
    {
        $statement->bind_result($seats);
        while ($statement->fetch())
        {
            echo "Result: $seats";
    
            // Continue to process the data... You can just use $seats.
        }
    }
    
    $mysql->close();
    

    但是,您的原始示例失败的原因是您引用了$cclass

    $db_seats = $result[$cclass]; 
    

    但是,请不要忽视上述严重的安全风险。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多