2014-12-26 3 views
0

Im PHP로 초보자가 비디오를 보면서 기본 학습. 우리는 양식을 만드는 과정에 있습니다. 나는 아래를 제외하고 일어나는 모든 것을 이해했다. 그는이 같은 왜 그랬는지 사람>id='$_SESSION['user_id']";함수를 통해 데이터베이스 필드 전달하기

id='"'.$_SESSION['user_id']."'"; 

function getuserfield($field){ 
$query = "SELECT $field FROM users WHERE id='".$_SESSION['user_id']."'"; 
$query_run = mysql_query($query); 

if($query_run){ 
    return mysql_result($query_run, 0, $field); 
} 
} 
+2

저자는 변수 보간법 대신'.' 연산자를 사용하여 연결을 선택했습니다. 하나 또는 다른 것을 할 큰 이유가 없습니다. 스타일이 대부분입니다. 'id = '$ _ SESSION ['user_id ']''는 큰 따옴표로 둘러싸인 문자열 내부에서 문법 에러가 될 것이라는 것에주의하십시오. ''id = '{$ _ SESSION ['id ']}' '로 묶인'{}'이거나'[ 'id']가 아닌'[id]'로 배열 키 따옴표를 생략해야합니다. 큰 따옴표로 묶인 문자열의 변수들에 대한 보간법 [PHP Strings 매뉴얼에 설명되어 있습니다.] (http://php.net/manual/en/language.types.string.php) –

+0

내가 지적했듯이 - 배우기 때문에, 올바른 방법을 배우기 시작하는 것이 중요합니다. mysql _ *() 함수는 작년 PHP 5.5에서 사용되지 않으므로 새로운 코드로 사용하면 안됩니다. 결국 PHP에서 완전히 제거 될 것입니다. 대신, 준비된 명령문에 대해'prepare()/execute() '와 함께 PDO를 사용하는 법을 배우기 시작할 때입니다. [MySQL 개발자를위한이 PDO 튜토리얼] (http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers)은 사용되지 않는'mysql _ *()'함수의 맥락에서 PDO를 배치합니다. –

+1

연결의 차이점에 대한 정보는 [이 참조 질문] (http://stackoverflow.com/questions/5605965/php-concatenate-or-directly-insert-variables-in-string/5605970#5605970)을보십시오. 변수 보간. 매번 논증이 있습니다. 존재하는 [매우 작은 속도 차이] (http://stackoverflow.com/questions/13620/speed-difference-in-using-inline-strings-vs-concatenation-in-php5/13665#13665)도 있지만 당신은 절대 자신에 대해 걱정하지 않아야합니다. –

답변

0

가 SQL 쿼리에 변수의 삽입에 말을 많이하지만, 초보자 단지 구문 ---보다는 나에게 설명해 주시겠습니까 :

PHP에서는 문자열에 작은 따옴표 나 큰 따옴표를 사용할 수 있지만 작은 따옴표 안에 변수를 대체 할 수 없습니다.

SQL에서 문자열은 작은 따옴표로 묶어야하며 결과는 WHERE id='asdf'과 같아야합니다. 따라서 예 WHERE id='".$_SESSION['user_id']."'"에는 등호 다음에 작은 따옴표가 있고, 문자열의 끝, 문자열 연결, 변수 연결, 문자열 연결, 문자열 시작, 작은 따옴표 닫기 등이 있습니다.

id='$_SESSION['user_id']";에는 불균형 한글과 큰 따옴표가 있습니다.

PDO, 준비된 문 및 바운드 변수와 같은 것을 사용하는 것이 훨씬 더 좋습니다.

더 많은 설명 : 데이터베이스에서 id 열은 대부분 정수 유형입니다. 이는 다른 해결책이 필요합니다.

관련 문제