2013-03-01 49 views
0

我目前正在開發一個應用程序,它將通過我寫的PHP服務與數據庫進行通信。PHP MySQL語句沒有返回任何內容?

我遇到的問題是應根據用戶的搜索字符串查找表中的行或行。

下面的PHP旨在用一個名爲「name」的變量來接收GET請求,該變量將成爲SQL查詢使用的數據。我看不出什麼毛病我的代碼然而從搜索返回的行始終爲0

// checks for the post data 
if (isset($_GET["name"])) { 
    $name = '%' . $_GET['name'] . '%'; 

    // get a list of products from the database 
    $result = mysql_query("SELECT * FROM products WHERE name LIKE $name"); 

    if (!empty($result)) { 
     // check for empty result 
     if (mysql_num_rows($result) > 0) { 

      $result = mysql_fetch_array($result); 

      $products = array(); 
      $products["id"] = $row["id"]; 
      $products["name"] = $row["name"]; 
      $products["type"] = $row["type"]; 
      $products["price"] = $row["price"]; 
      $products["photo"] = $row["photo"]; 
      // success 
      $response["success"] = 1; 

      // products node 
      $response["products"] = array(); 

      array_push($response["products"], $products); 

      // echoing JSON response 
      echo json_encode($response); 
     } else { 
      // no products found 
      $response["success"] = 0; 
      $response["message"] = "No products found"; 

      // echo no products JSON 
      echo json_encode($response); 
     } 
    } else { 
     // no products found 
     $response["success"] = 0; 
     $response["message"] = "Search Complete... No products found"; 

     // echo no products JSON 
     echo json_encode($response); 
    } 
} else { 
    // required field is missing 
    $response["success"] = 0; 
    $response["message"] = "Required field(s) is missing"; 

    // echoing JSON response 
    echo json_encode($response); 
} 

我對此非常期待在表中的條目和「薯片」的名字,所以當我送得到請求與說「cr」的數據我希望看到在結果中的條目,但它返回0行。

然後什麼更奇怪的是,當我直接對我的數據庫運行下面的SQL它實際上拉回正確的記錄。

SELECT * FROM products WHERE name LIKE "%cr%" 

任何想法??

+0

注意,所有'mysql_ *'功能被棄用(參見[紅色框](http://php.net/mysql_query))。您還需要在'$ _GET ['name']'中轉義'%'和'_'。 – 2013-03-01 14:12:38

+0

脫離主題幫助:解決此問題後,您將遇到更多問題。請參閱:'$ result = mysql_query();'然後您有'$ result = mysql_fetch_array()',但是您使用'$ row [「price」]''。 '$ row'將是未定義的,'$ result'將包含一個數組數組。最好的祝願 :-) – phpisuber01 2013-03-01 14:12:41

回答

1

在你查詢你需要引號'添加到您的'$name'

$result = mysql_query("SELECT * FROM products WHERE name LIKE '$name'"); 
1

因爲你沒有換用單引號的價值,記住,這是一個字符串文字。

SELECT * FROM products WHERE name LIKE '$name' 

作爲旁註,查詢是用SQL Injection脆弱,如果變量的值(小號)從外部來了。請看下面的文章,瞭解如何防止它。通過使用PreparedStatements你可以擺脫使用單引號圍繞值。

相關問題