2014-06-08 3 views
-1

PHP에서 프로젝트를 진행하고 있었고 배열을 문자열로 변환하는 중임을 알았습니다. 나는 주위에 방법이 있는지 궁금 해서요?알림 PHP에서 문자열 변환에 대한 배열

if(isset($_POST['acceptrequest' . $user_from])) { 
    $get_friend_check = mysql_query("SELECT friend_array FROM users WHERE username='$user'"); 
    $get_friend_row = mysql_fetch_assoc($get_friend_check); 
    $friend_array = $get_friend_row['friend_array']; 
    $friendArray_explode = explode(",",$friend_array); 
    echo $friendArray_explode; 
} 
+1

SQL 인젝션 취약점이 있습니다. – SLaks

+0

'echo $ friendArray_explode;'explode()'를 호출하면'$ friendArray_explode'에 배열이 반환되고, 그 문자열을 마치 문자열처럼 에코하려고 시도합니다. –

+0

결과를 보려고하는 경우 var_dump ($ friendArray_explode). 실제로 코드에 몇 가지 문제가 있습니다. 더 이상 사용되지 않는 오래된 MySQL 명령을 활용하고 있습니다. 대신 mysqli 명령으로 전환해야한다. (http://www.php.net//manual/en/migration55.deprecated.php). 준비된 명령문 (http://www.php.net//manual/en/mysqli.quickstart.prepared-statements.php) 대신 쿼리를 연결하여 SQL 인젝션을 수행 할 수 있습니다 공격, 당신이 엄격하게 제어하지 않는 한 $ 사용자. 희망이 도움이됩니다. – IrishGeek82

답변

2

다른 MySQL 드라이버 인 MySQLi 또는 PDO를 사용해야합니다. 기본 MySQL 드라이버는 더 이상 사용되지 않으며 SQL 주입에 취약하기 때문입니다.

SQL 삽입을 방지하려면 준비된 문을 사용해야합니다.

$selectFriendsStatement = $pdo->prepare('SELECT friend_array FROM users WHERE username=?'); 
$selectFriendsStatement->execute(array($user)); 

대신

$get_friend_check = mysql_query("SELECT friend_array FROM users WHERE username='$user'"); 

의 당신은 camelCase 또는 underscore_caseconsistently by the variable names을 사용해야합니다. 따라서 $friendArray_explode 대신 $friend_array_explode을 사용하십시오.

아무 것도 처리하기 전에 postData의 유효성을 검사해야합니다.

GROUP_CONCAT()과 같은 집계 함수를 사용하고 친구로 배열을 저장하는 대신 1 : n 또는 n : m 관계로 다른 테이블을 추가해야합니다.

당신은 테이블과 열 이름 주위에 특별한 따옴표를 추가해야합니다, 당신은 이름 충돌을 피하기 위해 MySQL의 열 이름을 접두사해야

`users`.`name` 

대신 username.

의미있는 변수, 함수, 클래스 이름을 제공해야합니다. 예 : get_friend_check 대신 selectFriendsResult

fetch assoc 대신 단일 열을 반입하려는 경우 fetch 열을 사용해야합니다.

+0

참고 :'explode'는 UTF-8 문자열에서도 문제없이 작동합니다. – deceze

+0

문자열의 형식이 UTF-8이 아닌 한. 나는이 경우 시나리오가 불가능하다고 생각한다. 감사! – inf3rno

+0

"낙타 사용 ...변수 이름에 대한 "- 데이터베이스의 PHP 또는 열 이름의 변수 이름 왜? – MrWhite

관련 문제