>  기사  >  백엔드 개발  >  SQL의 조건 필드와 테이블 필드 이름이 동일하여 전체 테이블 쿼리가 발생합니다.

SQL의 조건 필드와 테이블 필드 이름이 동일하여 전체 테이블 쿼리가 발생합니다.

WBOY
WBOY원래의
2016-08-18 09:15:291417검색

안녕하세요 여러분. 저는 실제로 다음과 같은 문장을 발견했습니다.

<code>SELECT * FROM seller_item_classify where sid=$sid order by cweight asc ;
</code>

여기서 $sid는 프런트 엔드에서 전달된 값이고, Seller_item_classify는 표시이며, sid는 테이블의 필드 이름입니다.
$sid에서 전달된 값이 우연히 'sid'인 경우 SQL은 다음과 같습니다. 예, 전체 테이블 쿼리가 발생합니다.

프로덕션 환경에서는 $sid 값이 숫자 값이거나 문자일 수 있으므로 PHP에서 프런트엔드 입력 값을 필터링해야 하나요?

이 문제에 대해 어떻게 생각하시나요?

답글 내용:

안녕하세요 여러분. 저는 실제로 다음과 같은 문장을 발견했습니다.

<code>SELECT * FROM seller_item_classify where sid=$sid order by cweight asc ;
</code>

여기서 $sid는 프런트 엔드에서 전달된 값이고, Seller_item_classify는 표시이며, sid는 테이블의 필드 이름입니다.
$sid에서 전달된 값이 우연히 'sid'인 경우 SQL은 다음과 같습니다. 예, 전체 테이블 쿼리가 발생합니다.

프로덕션 환경에서는 $sid 값이 숫자 값이거나 문자일 수 있으므로 PHP에서 프런트엔드 입력 값을 필터링해야 하나요?

이 문제에 대해 어떻게 생각하시나요?

<code>"SELECT * FROM seller_item_classify where sid='$sid' order by cweight asc ;"</code>

프런트엔드 입력값은 백엔드에서 필터링을 해야 하며, SQL 전처리를 사용하는 것을 권장합니다.

SQL 조건값에 '' 추가

<code>sid = '$sid'</code>

as 别名 효과가 있나요?

문제 해결을 위해 작은따옴표를 추가하세요

'SELECT * FROM Seller_item_classify where sid='.$sid.' order by cweight asc ;'
pdo 전처리 사용

<code><?php
$sid = issset($_REQUEST['sid']) ?  htmlspecialchars(trim($_REQUEST['sid'])) : '';
if (!$sid or $sid=='sid') {
    // 非法请求 这里可以抛出一些异常
}</code>
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.