2012-07-05 4 views
8

가능한 중복 :
PHP: Warning: sort() expects parameter 1 to be array, resource givenmysqli_fetch_assoc는()는 매개 변수 1 mysqli_result 수, 부울 주어진 기대

나는 PHP와 MySQL 꽤 새로운 오전 난 그냥이 일을 알아낼 수 없습니다 아웃. 나는이 포럼을 수색했지만 대답을 찾지 못했습니다. 원래는 mysql_fetch_assoc()을 사용하고 있었지만 숫자 만 검색 할 수 있었고 글자를 검색 할 때 오류가 발생했습니다. 나는 여기서 바른 길을 가기를 바랍니다. 모든 도움을 미리 보내 주셔서 감사합니다!

$con = mysqli_connect($hostname,$username,$password) or die ("<script language='javascript'>alert('Unable to connect to database')</script>"); 
mysqli_select_db($con, $dbname); 

if (isset($_GET['part'])){ 
    $partid = $_GET['part']; 
    $sql = 'SELECT * 
     FROM $usertable 
     WHERE PartNumber = $partid'; 

    $result = mysqli_query($con, $sql); 
    $row = mysqli_fetch_assoc($result); 

    $partnumber = $partid; 
    $nsn = $row["NSN"]; 
    $description = $row["Description"]; 
    $quantity = $row["Quantity"]; 
    $condition = $row["Conditio"]; 
} 
+2

SQL 삽입을 방지하기 위해'$ _GET [ 'part']'를 필터링하는 것을 잊지 마십시오. – honyovk

답변

17

결과가 결과가 아니지만 대신 "거짓"인 경우에 발생합니다. 할 수없는 '상태가 "$ 변수를 interprete 수 있기 때문에

$sql = "SELECT * FROM $usertable WHERE PartNumber = $partid"; 

정수 (숫자)와 함께 잘 작동 문자열이 필요 : 이 라인이에

$sql = 'SELECT * FROM $usertable WHERE PartNumber = $partid'; 

을 변경해야합니다. $ 변수를 작은 따옴표로 묶으려는 경우

$sql = "SELECT * FROM $usertable WHERE PartNumber = '$partid' "; 

/작은 따옴표와 함께 일해야 원하는 다음, PHP는 변수를 interprete 수없는,이처럼해야 할 것 :

$sql = 'SELECT * FROM '.$usertable.' WHERE string_column = "'.$string.'" AND integer_column = '.$number.'; 
+0

위와 같이 문자열을 이스케이프해야하기 때문입니다. 나는 방금 내 대답을 향상시켰다. – Sliq

+0

정말 고마워,이 트릭을 한거야! 모두의 도움에 정말 감사드립니다! – user1504463

+0

"이것은 결과가 결과가 아닐 때 발생합니다 (대신"거짓 "이됩니다)." 그 덕분에 몇 초만에 디버깅이 가능했습니다. – madhuspot

4

변수 대신 변수 텍스트를 만드는 SQL 문을 단일 인용 부호로 묶습니다.

$sql = "SELECT * 
    FROM $usertable 
    WHERE PartNumber = $partid"; 
11
mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given 

이것은 당신이 전달 된 첫 번째 매개 변수가 진정한 부울 (또는 것을 의미 그릇된).

첫 번째 매개 변수는 $result이고 쿼리에 구문 오류가 있으므로 false입니다.

" ... WHERE PartNumber = $partid';" 

요청 변수를 SQL 쿼리에 직접 포함하면 안됩니다. 그렇지 않으면 사용자가 쿼리에 SQL을 삽입 할 수 있습니다. (SQL injection를 참조하십시오.)

당신은 변수를 탈출해야합니다

" ... WHERE PartNumber = '" . mysqli_escape_string($conn,$partid) . "';" 

또는 더 나은, Prepared Statements을 사용합니다.

+0

http://www.macaerospace.info/inventory/test?part=1 숫자를 검색 할 때 잘 작동합니다. http://www.macaerospace.info/inventory/test?part=PN123이 작동하지 않으며 부울 오류가 발생합니다. 또한 이스케이프 문자열을 삽입 할 때 T-VARIABLE 오류가 발생했습니다. 보안 문제는 지금 당장은 큰 문제가 아닙니다. 먼저이 문제를 해결하려고합니다. – user1504463

0

$usertable이 유효한 테이블이 아니거나 PartNumber 열을 포함하지 않거나 파트가 숫자가 아닌 경우 코드에서 어떤 현상이 발생합니다.

당신은 $ partid을 탈출하고 부울

2

Mysqli 객체 지향 프로그래밍을 사용한다 반환 할 수 있기 때문에 mysql_fetch_assoc()에 대한 문서를 읽어야합니다.대신이 방법을 사용해보십시오 : 당신이 그것을 확인 삼중해야 할 수도 있으므로

function dbCon() { 
     if($mysqli = new mysqli('$hostname','$username','$password','$databasename')) return $mysqli; else return false; 
} 

if(!dbCon()) 
exit("<script language='javascript'>alert('Unable to connect to database')</script>"); 
else $con=dbCon(); 

if (isset($_GET['part'])){ 
    $partid = $_GET['part']; 
    $sql = "SELECT * 
     FROM $usertable 
     WHERE PartNumber = $partid"; 

    $result=$con->query($sql_query); 
    $row = $result->fetch_assoc(); 

    $partnumber = $partid; 
    $nsn = $row["NSN"]; 
    $description = $row["Description"]; 
    $quantity = $row["Quantity"]; 
    $condition = $row["Conditio"]; 
} 

날 당신은 질문이있는 경우,이 코드를 테스트 할 수 있습니다 알고 가자!

+1

SQL 쿼리가 유효하지 않습니다. 작은 따옴표 문자열에서 변수를 사용할 수 없습니다. – Twister1002

관련 문제