2016-11-08 2 views
0

저는 프로그래밍을 배우기를 희망합니다. 나는 PHP를 선택하고 4 판 Oreilly와 함께 작업했습니다. 첫 번째 주요 프로그램을 이해하려고합니다. 나는 그것이 매우 간단하다고 확신하지만 나는 한 부분을 이해하지 못한다. 난 관련 비트 약간 간략화 프로그램의 다음 부분에서 :

$conn = new mysqli(parameters to connect to database) 

$stuff = get_post($conn, 'stuff') 

$query = "INSERT INTO table VALUES" . "('$stuff')" 

$result = $conn->query(query) 

Function get_post($conn, $var) 

Return $conn->real_escape_string($_POST[$var]) 

를 I는 악의적 사용자 입력 해킹을 방지하는 방법을 이해. 내가 이해하지 못하는 부분은 왜 사용자 입력 양식이 들어있는 $_POST이 데이터베이스에 들어가기 전에 데이터베이스의 속성으로 취급 되는가입니다. (마지막 줄에서) 나는 물건들이 데이터베이스에 들어가기 전에 제거 될 것이라고 생각했다. 나는 아주 기초적인 무언가를 여기에서 놓치고있다라고 확신한다. 그래서 나는 누군가 이것이이 작용 방식을 설명 할 수 있기를 바란다.

기본적으로 나는 이 $conn의 속성이되는 방법을보기 위해 고심하고 있습니다. 아무도 그것을 통해 나를 걸을 수 있습니까?

어떤 도움을 주셔서 감사합니다.

$conn = new mysqli(parameters to connect to database) 

을이 라인, 당신은 MySQL 데이터베이스와 상호 작용 객체를 생성 :

+2

더 나은 방법이 있습니다. [이스케이프 문자열] (http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real- 이스케이프 문자열)은 안전하지 않습니다! [믿지 마시오?] (http://stackoverflow.com/q/38297105/1011527) [MySQLi] (http : //www.wikipedia.org/wiki/Prepared_statement)에 대한 [준비된] 문장에 대해 알아보십시오. : //php.net/manual/en/mysqli.quickstart.prepared-statements.php). –

+0

나는 당신이 무슨 일이 일어나고 있는지에 대해 약간의 오해가 있다고 생각합니다, 크리스. '$ conn'의 속성으로'$ _POST'를 어디에서 보십니까? – CollinD

+0

안녕하세요. 네, 더 나은 방법은 다음 장에서 다룹 니다만, 나는 앞장서 ​​기 전에 안전하지 않은 간단한 방법으로 무슨 일이 벌어지고 있는지 이해하려고 노력하는 초심자입니다.내 혼란은 Return $ conn-> real_escape_string ($ _ POST ($ _ POST [$ var])입니다. 만약 내가 $ conn -> ($ _ POST [$ var])를 반환하는 것이 단순화한다면, 나는 화살표가 의미하는 것으로 혼란스러워 할 것입니다. – Chris

답변

0

는 단계별로 갈 수 있습니다.

$stuff = get_post($conn, 'stuff') 

이 줄은 "stuff"라는 POST 변수에서 정보를 검색하고이를 $ stuff 변수에 할당합니다. 당신이 "표"(데이터베이스에 강제로 테이블에 변수 $ 물건의 값을 삽입 할 쿼리가 처음

$result = $conn->query(query) 

이 하나가 까다 롭습니다, 그것은 2 일을,이다

$query = "INSERT INTO table VALUES" . "('$stuff')" 

, $ conn 객체 ($ conn-> query)의 질의 함수를 사용하고 $ query 변수를 그 함수에 준다. 질의가 데이터베이스로 실행되면 그 요청의 결과는 $ result에 저장된다.

마지막으로, 함수 :

함수 get_post ($ conn, $ var) { return $ conn-> real_escape_string ($ _ POST [$ var]); }

real_escape_string에 사용하는 함수는 $ conn 변수와 함께 전달되는 mysqli 객체에 이미 프로그래밍되어있는 함수로, $를 연결할 때 쿼리를 중단시킬 수있는 악성 문자 스트링을 정리합니다 query = "INSERT INTO 테이블 VALUES". "('$ stuff')"

+0

아, 이제 알 것 같아. 그것은 내 뇌를 속이는 마지막 단계 일뿐입니다. – Chris

+0

그것은 내가 이스케이프 문자열이 mysqli (따라서 conn 객체)의 일부이고 PHP 전체가 아니라는 것을 깨닫지 못했다. 나는 그것이 맞았 으면 좋겠지 만 그것이 사실이라면 말이된다. – Chris

관련 문제