2013-03-01 6 views
0

저는 현재 작성한 PHP 서비스를 통해 데이터베이스와 통신 할 응용 프로그램을 개발 중입니다.PHP MySQL 문이 아무것도 반환하지 않습니까?

내가 문제가되는 서비스는 사용자의 검색 문자열을 기반으로 테이블에서 행 또는 행을 찾아야하는 서비스입니다.

아래의 PHP는 SQL 쿼리에서 사용하는 데이터가 될 "name"변수를 사용하여 GET 요청을 수신하도록 설계되었습니다. 그래서 나는를 보낼 때, 그러나 검색에서 반환 된 행은 항상 내가 그것을보고있는 테이블의 항목과 "칩"의 이름이 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

참고합니다 ([빨간색 박스] 참조 (http://php.net/mysql_query)). 또한 $ _GET [ 'name']'에서'%'와'_'를 이스케이프해야합니다. –

+0

Off-Topic Help :이 문제를 해결 한 후에 더 많은 문제가있을 것입니다. See :'$ result = mysql_query();'그런 다음 당신은'$ result = mysql_fetch_array()'를 가지고 있지만'$ row [ "price"]'를 사용합니다. '$ row'는 정의되지 않고'$ result'는 배열의 배열을 포함합니다. 최선의 소원 :-) – phpisuber01

답변

1

당신은 당신이 따옴표로 값을 포장하지 않았기 때문에, 당신의 '$name'

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

에 따옴표 '를 추가는 리터럴 문자열 인 것을 기억해야합니다. 변수의 값 (S)는 외부로부터 제공된 경우 (!) 참고로서

SELECT * FROM products WHERE name LIKE '$name' 

는 쿼리 SQL Injection으로 취약하다. 그것을 막는 방법을 배우려면 아래의 기사를보십시오. PreparedStatements을 사용하면 값 주위에 작은 따옴표를 사용하지 않아도됩니다.

관련 문제