2015-12-27 55 views
2

我有一個數據庫表,它有兩列,businesstouristMYSQL將列名賦給變量?

我要求用戶從下拉列表中選擇其中的一個,然後在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']; 
} 
+0

你能展示更多的代碼上下文,比如說,在哪裏定義了'$ cclass'? – Will

+0

如果您要將其顯示回屏幕,最終的sql語句會是什麼樣子? – RamRaider

+0

要非常小心,並確保您知道在執行此操作之前$ cclass是一個實際的列名,否則您有SQL注入的風險 – Andrea

回答

3

則應更換這行:

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

這一點:單引號

$db_seats = $result[$cclass]; 

之間串2並沒有解析: Strings

+0

我想知道我沒有注意到這一點......我的錯誤已修復..謝謝。 。+1 :) –

1

您是否嘗試過做以下幾點:

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

首先,該代碼有一個嚴重的安全問題,因爲它很容易受到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]; 

但是,請不要忽略了嚴重的安全上面提到的風險。