2013-08-12 3 views
1

나는 각각의 '데이터 오브젝트'에 대한 개별 테이블과 액세스를위한 PDO를 저장하기 위해 MySQL 데이터베이스를 사용하고 있습니다. 테이블의 이름은 다른 데이터베이스/테이블에 저장되므로 올바른 테이블에 쓰고 우연히 특정 열/행에 쓰려면 추상화 된 함수에 삽입해야합니다. 많은 좌절감과 ENTIRE 문서 페이지를 읽지 못해서 PDO 준비 문을 사용할 때 테이블과 열 이름을 바인딩 할 수 없다는 사실을 알았습니다. 꿰매다. 그때 이후로 나는 준비 과정에서 변수가이 필드에 사용될 수없는 이유를 이해합니다. 가능한 한 해결 방법을 찾을 때입니다. 나는 prepared statement가 first order SQL injection을 막기위한 PHP 표준으로 받아 들여지고 있음을 이해한다. 내 질문 :MySql 세미 다이나믹 테이블 이름

다른 답변에서 불가능한 것부터 너무 많은 다양한 답변 (아래 링크 참조)이 있으므로 보안에 익숙한 사람들이 실행하여 구현하기 전에 가장 안전한 방법을 선택하고 싶습니다. INFORMATION_SCHEME, 전역 변수 또는 백틱의 문제를 해결하려면? 사기꾼?

MySQL Stored Functions - Dynamic/Variable Table & Column Names

또는

creating mysql tables with variable table names

또는

Use of wildcards in mysql table name

참고 : 나는 동적 테이블 이름이 가난한 디자인 멸시하는 것을 알고 있지만, 나는이 만 고려 테이블 이름이 다른 t에 영구적으로 저장되므로 세미 동적 유효 필드는 유효성을 검사하고 수정 한 다음 참조로 사용됩니다.

답변

1

각 '데이터 개체'에 대한 개별 테이블과 액세스 용 PDO를 저장하기 위해 MySQL 데이터베이스를 사용하고 있습니다.

이것은 잘못된 것입니다. 따라서

MySql 세미 다이나믹 테이블 이름을 사용하지 마십시오.

이것은 보안 결함이 아니지만 기본 데이터베이스 디자인 규칙을 위반 한 것입니다.

먼저 적절한 방법을 배우지 않으시겠습니까? 단일 테이블에 개체를 저장하는 것이 좋습니다. 당신은 그것으로 한가지 문제가 없을 것입니다. 그러나 그것은 당신에게 두통을 안겨줍니다. 당신이 직면 한이 바보 같은 문제보다 훨씬 더 나쁜 것입니다.

+0

네 말이 맞아, 이건 어리석은 문제 야. 사용자 이름이 고유하기 때문에 더 쉽게 참조 할 수 있도록 테이블 이름을 사용자 이름을 기반으로하고 중복을 방지하기를 원했습니다. 예를 들어 페이스 북과 같은 웹 사이트를 사용하면 적절한 기본 디자인은 어떻게 생겼을 까? 모든 사용자 계정 설정에 대한 하나의 테이블 -> "계정 설정". 그런 다음 사용자 이름별로 특정 레코드를 찾으십시오. 사용자 사진 -> "사용자 사진"에 대한 모든 참조에 대해 하나의 테이블을 만든 다음 사용자 이름별로 레코드를 찾습니다. 나는 사용자를 기반으로 더 많은 구획화를 원했지만이 '어리석은 문제'의 미래 전파를 막고 싶다. – SilverFox

+0

... 이것은 단지 하나만 사용하여 각 사용자 프로필을 검색하는 것과는 대조적으로 상당히 많은 쿼리처럼 보일 것입니다. 그러나 이것이 이것이 완료된 방법이라면, 나는 확립 된 모델을 따르는 것을 선호 할 것입니다. – SilverFox

+0

의견에서 그러한 질문을하지 마십시오. 그냥 일반 질문을하십시오. 미안하지만, "이 번호를 좋아하기 때문에 2x2가 5가되기를 바란다"와 같이 당신의 추론은 유치한 것처럼 들립니다. 데이터베이스 디자인의 기본 원칙을 이해하는 교육은 없습니다. 하지만 적어도 Stack Overflow에 관한 질문을 할 수 있습니다.한번에 계몽하는 것만으로는 충분하지 않지만 적어도 올바른 접근법을 알게 될 것입니다. –