2009-10-18 3 views
0

안녕하세요. $ name [] 배열을 가지고 있는데, 내 테이블의 두 번째 필드에 삽입하려고했으나 작동하지 않습니다 (테이블은 완전히 비어 있습니다). 내 코드에서 오류를 찾을 수 없습니다. 무엇을 잘못 했습니까?mysql에 php 배열 데이터를 삽입하는 것이 작동하지 않습니다.

$username="us"; 
$password="pw"; 
$database="db"; 
mysql_connect(localhost,$username,$password); 
@mysql_select_db($database) or die("error"); 

$i=0; 
while ($i < 5) { 


$query = "INSERT INTO table VALUES ('','$name[i]','','')"; 
mysql_query($query); 

$i++ 
} 

mysql_close(); 

어떤 아이디어입니까? 고맙습니다.

+1

Protip에 취약 할 수없는 경우

: A가에 대한 루프 당신에게 코드의 2 개 라인을 절약 할 수 사용. for ($ i = 0; $ i <5; $ i ++) {...} –

+0

해결되었습니다. 위의 while 루프에 오류가 있습니다. 그게 무엇인지 모르겠습니다. while 루프를 for 루프로 바꾸면 해결됩니다. –

+0

btw가 $ i ++라고 생각하는 오류는 누락되었습니다. 그 후에. –

답변

5

$name 키에 $i 대신 상수 i을 사용했습니다. 그래서이 시도 :

"INSERT INTO table VALUES ('','".$name[$i]."','','')" 

또한 mysql_real_escape_string를 사용하여 MySQL의 쿼리의 값을 탈출한다 : 이것은 당신에게 줄 것이다

mysql_query($query) or die(mysql_error()); 

:

"INSERT INTO table VALUES ('','".mysql_real_escape_string($name[$i])."','','')" 
+0

또는 "INSERT INTO 테이블 VALUES ('', '{$ name [$ i]}', '', '')" –

+0

그 중 하나가 작동하지 않습니다. –

0

이 같은 쿼리를 실행 해보십시오 당신의 질문에 문제가 있다면 당신이 잘못하고있는 것의 더 좋은 아이디어. 또한 디버깅을 위해 SQL을 인쇄 할 수 있습니다 값 $name[i]

글쎄, 먼저 할 것입니다 모든 컬럼 1, 3 항목을 넣어
echo "Query $i: $query<br />" 
2

, 4 빈, 및 열 2. 문자열에 변수를 넣으려면 큰 따옴표로 묶어야합니다. 그러나 변수를 가질 수있을 때 그 일의 요지는 보이지 않습니다.

또한 $name[i]$name[$i]으로되어 있습니다.

+0

$ name [$ i]로 바꿨으므로 아무런 차이가 없습니다. 나는 다른 열을 비워 둡니다. 데이터를 한 열만 가져 오면 열에 다른 배열을 가져올 수 있습니다. –

1

이와 같은 쿼리를 연결할 때 반드시 이스케이프 처리해야합니다.

$ query = "INSERT INTO 테이블 VALUES ('', 'mysql_real_escape_string ($ name [$ i]).' ',' ',' ')"; 당신은 당신이 SQL injection 불량

관련 문제