2012-06-12 2 views
3

변수 이름 $name 안에 저장된 이름을 테이블로 만들려고합니다. 나는 여러 가지 방법을 시도했지만 아무도 나를 위해 일하는 것.PHP 변수를 사용하여 MySQL 테이블 만들기

mysql_connect("localhost", "peltdyou_admin", "123456") or die(mysql_error()); 
mysql_select_db("peltdyou_orders") or die(mysql_error()); 
mysql_query("CREATE TABLE '" .$_POST['name']. "' (name VARCHAR(30), age INT, car VARCHAR(30))"); 

나는 '" .$_POST['name']. "' 함께 할 수있는 뭔가 알고 있지만, 내가 무엇을 작동하지 않을 수 있습니다 여기에 내가 현재 사용하고있는 코드입니다. 코드에서 더 이상 얻을 가치가있는 곳에서 '$name'을 시도했습니다.

도움이 될 것입니다.

+1

생성중인 SQL 출력을 시도 했습니까? 포함하고 있다고 생각되는 내용이 포함되어 있는지 확인할 수 있습니까? – andrewsi

+3

모든 mySQL 쿼리에서 POST 데이터를 직접 사용하지 마십시오. – Hidde

+1

필자가 아는 한, MySQL은 테이블 이름을 따옴표로 묶을 필요가 없습니다. 작은 따옴표를 제거해 보셨습니까? –

답변

8

따옴표가 아닌 테이블 이름 주위에 백틱을 사용하십시오. 그리고 입력을 피하십시오! 또한이 작업은 localhost에서 작동하지만 프로덕션 서버에서 실행중인 사용자는 테이블을 만들려면권한이 있어야합니다 (대개 AFAIK는 공유 호스팅에 포함되지 않음).

경고 단어 : 정말 사용자 입력에 테이블을 만들고 싶습니까? 이런 식으로 몇 개의 테이블을 만들 것입니까? 모든 것을 재 설계 할 수 없으므로 대신 을 삽입 하시겠습니까?

$name = mysql_real_escape_string($_POST['name']); 
mysql_query("CREATE TABLE `".$name."` (name VARCHAR(30), age INT, car VARCHAR(30))"); 
+1

+1 백틱에 대해 몰라;) – Gerep

+0

완벽! 매력처럼 작동합니다. 고마워요. 나는 4 분 안에 대답을 수락 할 것입니다. – user1449737

+0

데이터베이스에 새 클라이언트를 추가 할 때 관리자가 테이블을 생성합니다. 그래서 스팸 메일이되지 않을 것입니다 – user1449737

2

다른 변수에 넣으면 POST 변수와 mysql_query에서 " '"문자와 충돌이 발생합니다.

<?php 
mysql_connect("localhost", "peltdyou_admin", "123456") or die(mysql_error()); 
mysql_select_db("peltdyou_orders") or die(mysql_error()); 
$name = mysql_real_escape_string($_POST['name']); 
mysql_query("CREATE TABLE '$name' (name VARCHAR(30), age INT, car VARCHAR(30))"); 
?> 

나는 코드에 도움이 코드를 게시하지만 당신은 는 * 당신이 mysqli_를 사용해야합니다 * 기능을 기능을 mysql_로 사용해서는 안됩니다. 자세한 내용은 여기를 참조하십시오. http://php.net/manual/en/book.mysqli.php

+0

준비된 명령문은 식별자와 함께 작동합니까? 나는 그들이 묶는 가치를 위해서만 일했다고 생각했습니다. –

+0

당신은 맞습니다! http://php.net/manual/en/mysqli.prepare.php를 보면 다음과 같은 내용을 알 수 있습니다. P 편집 할 것입니다. 미안한 실수 였어 !!! –

1
mysql_connect("localhost", "peltdyou_admin", "123456") or die(mysql_error()); 
mysql_select_db("peltdyou_orders") or die(mysql_error()); 

//prevent injection: 
$name = mysql_real_escape_string($name); 

$query = <<<SQL 
CREATE TABLE `{$name}` (name VARCHAR(30), age INT, car VARCHAR(30)); 
SQL; 

if (mysql_query($query)) { 
//success 
} else { 
//error 
} 
1

당신은 정말 * 기능을 PDO 또는 MySQLi 대신 mysql_로를 이용해야한다. mysql_ * 함수는 더 이상 사용되지 않고 보안상의 구멍으로 가득 차 있습니다.

그렇다면 테이블 이름을 인용 할 필요가 없으며 대신 아무것도 사용하지 말아야합니다. 당신이 이런 일을 할 수있는 최신 Mysqli 커넥터를 사용

+0

PDO 또는 mysqli를 사용하여 어떻게 변수를 식별자에 바인딩합니까? –

+0

조회에 과 같을 것이다 것은 테이블을 만듭니다 이름 (이름 VARCHAR (30), 연령 INT, 자동차 VARCHAR (30) 다음 $ stmt-> bindParam ("이름", $ _POST [ '이름' ]) 전체 예제를 보려면 모든 기본 사항을 제공 할 수있는 훌륭한 PDO 자습서가 필요합니다. –

+0

정말 확실합니까? 문서에서 다르게 말하는 경우도 있습니다. 다음을 읽어보십시오 : http://stackoverflow.com/ 질문/182287/can-php-pdo-statement-accept-the-table-name-as-parameter –

0

: 1. 같은 사용자의 입력에서 변수를 만들기 때문에 $variable=$_POST['name'] 2.

여기에 아래의 전체 코드에서와 같이 쿼리의 변수

$variable=$_POST['name']; mysqli_connect("localhost", "peltdyou_admin", "123456") or die(mysql_error()); mysqli_select_db("peltdyou_orders") or die(mysqli_connect_error()); mysqli_query("CREATE TABLE $variable (name VARCHAR(30), age INT, car VARCHAR(30))");

0

$ query = "CREATE TABLE $ name". '(ID INT (6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 나이 INT, 이름 varchar (30), 자동차 VARCHAR (30))';

+1

변수 이름을 열 이름으로 사용하는 방법을 알고 싶었습니다. – Anusha

+0

우리는 foreach 루프에서 create query를 작성하고 use.please를 안내하는 방법을 안내 할 수 있습니다. – Anusha