2013-01-21 2 views
1

PHP, PDO 및 MySQL을 사용하여 테이블을 만들려고합니다. 내 응용 프로그램의 필요에 따라 테이블 이름은 변수 여야합니다.PHP MySQL 생성 테이블

$request = $pdo->prepare("CREATE TABLE IF NOT EXISTS :table (
     `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 
     `parent_id` bigint(20) unsigned NOT NULL, 
     `position` bigint(20) unsigned NOT NULL, 
     `left` bigint(20) unsigned NOT NULL, 
     `right` bigint(20) unsigned NOT NULL, 
     `level` bigint(20) unsigned NOT NULL, 
     `title` text CHARACTER SET utf8 COLLATE utf8_unicode_ci, 
     `type` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL, 
     `content` text CHARACTER SET utf8 COLLATE utf8_unicode_ci, 
     PRIMARY KEY (`id`) 
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;"); 
$request->execute(array(
    'table'=>$uuid)); 

내가 사용할 수 없습니다 ": 테이블을"여기

내 코드는 MySQL 문에 ?? 는 현재 내가 쓴 :

[...] 
CREATE TABLE IF NOT EXISTS `$uuid` 
[...] 

이 작동하지만 나에게 이상한 소리 ^^ '내 문제에 대한 유일한 해결책인가?

+0

'var_dump ($ uuid);의 결과는 무엇입니까? – rekire

+0

테이블을 사용하여 버전을 실행하려고하면 어떻게됩니까? – DWright

+0

@rekire $ uuid에는 임의의 ID를 생성하는 데 사용하는 uniqid ("", true)의 결과가 포함되어 있습니다. – FWoelffel

답변

4

매개 변수로 테이블 이름을 전달할 수 없습니다. 변수 이름으로 테이블을 생성하려면 동적 쿼리를 사용해야합니다.

+0

나는 그것을 얻지 못한다 ... ^^ '나는 누군가가 내 웹 사이트에 등록 할 때마다 하나의 테이블을 만들면된다. (하나의 새로운 사용자 = 하나의 새로운 테이블). 동적 쿼리가 실제로 필요한 것입니까? 어떻게 할 건데? – FWoelffel

+5

"한 명의 새로운 사용자 = 하나의 새 테이블"최악의 디자인. 사용자 테이블 PK를 참조하는'UserId' 필드를 포함하십시오. –

+0

호 코비 얀 (Hokobyan) 정말 나쁜 디자인이라는 것을 알고 있습니다. 그러나 나는이 프로젝트를 위해 시간이 없으며 이것은 가장 단순한 버전 인 것으로 보인다. 모든 사용자가 포함 된 테이블을 보유하고 있으며 각 사용자는 온라인으로 파일을 저장하고 "나무가 보이는"물마루에 액세스 할 수 있습니다. 그래서 각 사용자는 파일이 저장되는 테이블 (예 : 변수 이름을 사용하여 생성하려는 테이블)을 가지고 있습니다. 표의 이름은 사용자 ID와 일치합니다. – FWoelffel

1
$pdo->query("CREATE TABLE IF NOT EXISTS userfiles (
    `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 
    `user_id` int unsigned NOT NULL, 
    `parent_id` bigint(20) unsigned NOT NULL, 
    `position` bigint(20) unsigned NOT NULL, 
    `left` bigint(20) unsigned NOT NULL, 
    `right` bigint(20) unsigned NOT NULL, 
    `level` bigint(20) unsigned NOT NULL, 
    `title` text CHARACTER SET utf8 COLLATE utf8_unicode_ci, 
    `type` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL, 
    `content` text CHARACTER SET utf8 COLLATE utf8_unicode_ci, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8"); 

이것은 이러한 상황을 처리하는 유일한 방법입니다.
이러한 문제는 매우 기본적인 것입니다.
현재 설정은 사각형 휠이있는 자동차와 같습니다.
시간이 부족하더라도 단일 테이블로 만들어야합니다.
그렇지 않으면 더 많은 시간을 낭비하게되고 궁극적으로 어쨌든 무수히 많은 고통 후에 적절한 디자인으로 바뀔 것입니다.