2011-06-14 19 views
0

此頁面有一個變量(aucname2)傳遞給它,它應該使用它作爲sql語句的值。但它不斷告訴我該值被用作列,然後當然告訴我,列不存在where子句中的未知列

<?php 
    $auc = $_GET['aucname2']; 
    $db_name = "auctionfinal"; 
    $table_name = "auctions"; 
    $connection = @mysql_connect("auctionfinal.db.6084638.hostedresource.com","xxxxx", "xxxxx") or die(mysql_error()); 
    $db = @mysql_select_db($db_name, $connection) or die(mysql_error()); 
    $sql = "SELECT * FROM $table_name WHERE `aucname` = $auc"; 
    $result = @mysql_query($sql, $connection) or die(mysql_error()); 

    if (mysql_num_rows($result) > 0) { 
     while ($row = mysql_fetch_array($result)) { 
      $aucname3 = $row['aucname']; 
      $seller = $row['seller']; 
      $price = $row['price']; 
      $start = $row['start']; 
      $end = $row['end']; 
      $nbids = $row['nbids']; 
      $category = $row['category']; 
      $link = "pagename.php?aucname=$aucname"; 

      $display_block = "Auction Name - $aucname3 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      Seller - $seller &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      Price - $price &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      Start Date - $start </br> 
      End Date - $end &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      # bids - $nbids &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      Category - $category 
      <p> ------------------ </p>"; 

     } 
     echo "$display_block"; 
    } 
?> 
+6

什麼是一個令人難以置信的混亂:) – dynamic 2011-06-14 22:45:14

+0

仍然有點爛,但它好一點... – Zoidberg 2011-06-14 22:48:06

+7

好的經驗法則...如果您調用數據庫查詢,並在同一代碼塊中生成HTML,您的做一些可怕的事情是錯誤的。閱讀MVC上的愛上帝! – Zoidberg 2011-06-14 22:51:57

回答

7

改變這一行:

$sql = "SELECT * FROM $table_name WHERE aucname = $auc"; 

$sql = "SELECT * FROM $table_name WHERE aucname = '$auc'"; 

由於$auc是一個字符串,它需要用引號括起來,否則MySQL會嘗試查找該變量的值作爲列名。

此外,您應該首先使用mysql_real_escape_string()上的$auc,因爲否則您將容易受到SQL注入的影響。