좋아 ... 나는 물지 만,이 사이트가 제공 할 수있는 것보다 많은 도움이 필요하다. 아마도 책이나 SQL, MySQL 및 PHP에 대한 세 ...
질문에 : SQL UNION
당신이 생각하는대로하고 있지 않습니다. 데이터베이스에 SELECT
sql 쿼리를 보내면 요청한 데이터가있는 행이 0 개 이상 반환됩니다. 각 행은 명세서의 SELECT
절 (SELECT
과 FROM
사이)에 지정된 열 수를 갖습니다.
쿼리에는 한 열만 있습니다 (username
).
username | frenusername
---------|-------------
usera | userb
usera | userc
userb | userc
userc | usera
및 $username2 = 'userb'
, 다음을 : 당신이 UNION
를 사용하는 경우, friendship
의 데이터는 다음과 같습니다 가정, 당신은 (아마도) 두 번째 쿼리에 행을 추가 할 수 있지만 열 이름은 변경되지 않기 때문에 '는 다음과 같이 두 개의 행을 얻을 것이다 :
username
--------
usera
userc
SELECT username FROM friendship WHERE frenusername='{$username2}'
의 결과와 인 두 번째 행되는 첫 번째 행 많은에 대한 Mysql documentation를 참조
username
--------
userc
userb
을 제공
username
--------
userc
userb
userc
하지만 UNION
실제로 결과 집합에서 중복을 제거합니다
SELECT frenusername FROM friendship WHERE username='{$username2}'
에서 결과는 $username2 = 'usera'
경우와 같은 결과를 예상 할 수있다 , 훨씬 더. 간단히 말해서 UNION
은 두 개의 개별 데이터 세트 (친구로 $username2
, 친구로는 $username2
명이있는 한 세트의 사람들이있는 한 세트)를 얻고 자 할 때 꼭 필요한 방법입니다.
보너스로 다른 PHP 페이지 (예 : include()
등 사용)에 PHP 페이지를 포함하지 않는 한 같은 페이지에서 동일한 변수 이름을 사용하기 때문에 걱정할 필요가 없습니다 AJAX 스크립트.
그리고 예, POST 또는 GET HTTP 요청에서 직접 데이터를 사용하는 경우 SQL 주입에 대해 걱정해야합니다. 즉, $_POST
또는 $_GET
의 값에서 $username2
이 할당되고 질문에서 제공하는 코드보다 먼저 테스트하지 않으면
'$ query120'입니까? 나는 진심으로 당신이 120 개의 다른 병을 가지기를 희망합니다. 게다가, 왜 당신은 적절한 오류 처리를 수행하는 데이터베이스 (PDO 또는 자체 작성된)에 대한 래퍼를 사용하지 않는가? '또는 die (mysql_error())'는 적절하지 않습니다. – ThiefMaster
나는 120 가지 다른 병을 가지고있다. LOL. 필자는 SQL 주입을 피하기 위해 Prepare 문에 대해 많이 읽었지만 PDO를 수행하는 방법을 모르겠습니다. 왜 또는 죽는가 (mysql_error())가 적절하지 않은가? – zac1987
반복되는 코드가 많아서 오류를 기록하거나 사용자의 눈에 보이지 않게 할 수도 있습니다. 그리고 120 병에 대해서 : 왜 같은 것을 사용하지 않겠습니까?당신은 오래된 것들을 지킬 필요가 없습니다. – ThiefMaster