2013-04-26 3 views
0

PHP에 익숙하지 않아 데이터베이스에서 원시를 검색하려고하는데 결과가 항상 비어 있습니다. 다음 코드를 사용하여 테이블에 레코드를 삽입하고 작동했습니다. 결과는 1 원이 mysql_query는 항상 빈 값을 반환합니다.

PHP 파일에 사용 된 코드

를 삽입

INSERT INTO `registeration`.`cars` (`lnumber`, `type`, `model`, `motor`, `owner` 
,`expdate`) VALUES ('123654', 'Nissan maxima', '2008', 
'1500', 'name name', '2013-11-30'); 

은 다음과 같습니다

if (isset($_GET["lnumber"])) { 
$lnumber = $_GET['lnumber']; 
echo $lnumber; 
$result = mysql_query("SELECT * FROM cars WHERE lnumber = $lnumber"); 
if (!empty($result)) { 
    // check for empty result 
    if (mysql_num_rows($result) > 0) { 
     ....code.... 

    } 
} else { 
    // no car found 
    $response["success"] = 0; 
    $response["message"] = "No cars found"; 

    // echo no users 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); 
    } 

그러나, 결과는 항상 : 123654{"success":0,"message":"No cars found"}

+5

글쎄, mysql_error가 당신에게 무엇을 말합니까? 또한 : [** 새 코드에서 mysql_ * 함수를 사용하지 마십시오 **] (http://bit.ly/phpmsql). 그들은 더 이상 유지되지 않으며 [공식적으로 사용되지 않습니다] (http://j.mp/XqV7Lp). [** 빨간색 상자 **] (http://j.mp/Te9zIL)를 참조하십시오. 대신 [* prepared statements *] (http://j.mp/T9hLWi)에 대해 알아보고 [PDO] (http://php.net/pdo) 또는 [MySQLi] (http://php.net/)를 사용하십시오. mysqli) - [이 기사] (http://j.mp/QEx8IB)는 어떤 결정을 내리는 데 도움이 될 것입니다. PDO를 선택하면 [여기는 좋은 튜토리얼입니다] (http://j.mp/PoWehJ). – ceejayoz

+4

** 경고 ** 귀하의 코드는 SQL 주입 공격에 취약합니다! –

+1

'empty()'를 사용하여 쿼리를 확인하고 싶지 않습니다. 쿼리에 오류가 없으면 결과가 "비어 있음"(false)이됩니다. 'if (! empty ($ result)) {'를 제거하고 당신이하고있는 것처럼'mysql_num_rows'를 체크 할 것입니다. – showdev

답변

1

귀하의 코드가 올바르지 않습니다. mysql 함수는 FAILURE에서 boolean false를 반환합니다. 오류가 발생하면 mysql_query는 결과 핸들 (질의가 성공적으로 수행 되었음) 또는 부울 FALSE (무언가가 나왔다)를 리턴한다.

행이없는 결과 집합은 이 아니며 오류입니다. 그것은 단순히 비어있는 집합입니다. 코드는 더 비슷해야한다

$result = mysql_query($sql) or die(mysql_error()); // handle any error conditions 
if (mysql_num_rows($result) == 0) { 
    echo 'no records found'; 
} else { 
    ... build your json here ... 
} 

다른 사람들이 말한 것처럼 mysql _ *() 함수는 더 이상 사용되지 않으며 더 이상 사용되지 않습니다. 대신 mysqli 또는 PDO를 사용해야합니다.

다른 사람들이 말했듯이, 당신은 SQL injection attacks에 취약합니다. 읽기 전에 PHP/SQL을 사용하여 더 이상 작업하지 않기 전에 이들을 방지하는 법을 배웁니다.

+0

왜이 답변에 투표하지 않았습니까? –

+0

여러분 모두 좋은 의견과 조언을 주셔서 감사합니다. 잘못된 방법을 시작하고 싶지 않습니다. im은 안드로이드 개발자이고, 나는이 프로젝트가 오래되었다는 것을 알고 좋은 프로젝트에서 일하고있는 PHP를 배울 필요가있었습니다. – user2324939

0

먼저 mysql_*에서 mysqli_* 또는 PDO로 이동하는 것이 좋습니다. 둘째, 적절하게 정보를 가져와야합니다.

$result = mysql_query("SELECT * FROM cars WHERE lnumber = '$lnumber'"); 

if(mysql_num_rows($result) > 0) 
{ 
    while($row = mysql_fetch_array($result)) 
    { 
     echo $row['car']; 
    } 
} 
else 
{ 
    // No cars. 
} 

그런 다음 데이터베이스 정보로 무엇을 할 지 결정하십시오.

0

그냥이 테스트 if (!empty($result))를 제거하고 추가

$result = mysql_query("SELECT * FROM cars WHERE lnumber = $lnumber") or die(mysql_error()); 

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

} else { 
    // no car found 
    $response["success"] = 0; 
    $response["message"] = "No cars found"; 

    // echo no users JSON 
    echo json_encode($response); 
} 
0

die(mysql_error());이 모든 위대한 의견과 조언을 위해 너희들을 감사합니다, 내가 잘못된 길을 시작 안드로이드 개발자 메신저 싶지 않다 그리고 난 PHP를 배울 필요 이 프로젝트가 오래되었다는 것을 알고 좋은 일을하는 프로젝트입니다.

관련 문제