2012-07-28 3 views
-1

제목에서 '열 개수가 행 1의 값 개수와 일치하지 않습니다.'오류가 발생합니다. 데이터베이스와 데이터베이스에 보내고 싶은 값을 비교하고 실수를 찾지 못하면 인터넷을 살펴보고 다양한 솔루션을 시도했습니다. 그들 중 누구도 지금까지 일하지 않았다. 또한 VALUES 대신 SET를 사용하려고했습니다. 'Passwort'= '$ passwort'와 마찬가지로 - 트릭도하지 않았습니다. 여기 내 코드가있다. 누군가 내가 빗나간 명백한 실수를 발견 했을까?오류 '열 개수가 행 1의 값 개수와 일치하지 않지만 열 = 행'

$name = ($_GET["name"]); 
$sql = "INSERT INTO $DB_Table VALUES('$name')"; 

$passwort = ($_GET["passwort"]); 
$sql = "INSERT INTO $DB_Table VALUES('$passwort')"; 

$con = mysql_connect($DB_HostName,$DB_User,$DB_Pass) or die (mysql_error()); 
mysql_select_db($DB_Name,$con) or die(mysql_error()); 
mysql_set_charset('utf8', $con); 

mysql_query("INSERT INTO $DB_Table (Name,Passwort) VALUES ('$name','$passwort')"); 
$res = mysql_query($sql,$con) or die(mysql_error()); 
mysql_close($con); 
if ($res) { 
    echo "Der Benutzer wurde neu angelegt!"; 
}else{ 
    echo "Der Benutzername ist bereits vergeben"; 
} 
+2

* 고대 mysql_로 새로운 코드를 작성 중지하십시오 기능이 포함되어 있습니다. 그들은 더 이상 유지되지 않으며 커뮤니티는 [비추천 프로세스]를 시작했습니다 (http://news.php.net/php.internals/53799). 대신 준비된 구문을 배우고 [PDO] (http://php.net/pdo) 또는 [MySQLi] (http://php.net/mysqli)를 사용해야합니다. 만약 당신이 배울 점이 있다면, 여기 [PDO 관련 튜토리얼] (http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers). – DCoder

+1

스크립트 상단에서 데이터베이스 연결을 시작하고'$ sql'을 두 번 할당하면이 작업이 성공했는지 확인하기 위해 기본 검사를하지 않고 여전히 mysql_ * 함수를 사용합니다. PHP, 더 많이 읽어보십시오. – Gntem

답변

1
$sql = "INSERT INTO $DB_Table VALUES('$name')"; 

$sql = "INSERT INTO $DB_Table VALUES('$passwort')"; 

여기서 이전 변수를 덮어 썼습니다. 이전 변수를 덮어 쓴 점은 무엇입니까?

그리고 나서 테이블에 더 많은 열이 있기 때문에 쿼리가 실패합니다.

$res = mysql_query($sql,$con) or die(mysql_error()); 

이전 행이 이미 삽입을했기 때문에 왜 이것을 수행하려고하는지 알지 못합니다. 이걸 할 의도가 있니? :

모든 말했다
$sql = "INSERT INTO $DB_Table (Name,Passwort) VALUES ('$name','$passwort')"); 
$res = mysql_query($sql,$con) or die(mysql_error()); 

, 코드는 SQL 주입 공격에 vulnerably이며, 그것은 기존의 MySQL의 인터페이스를 사용합니다.

1

좋아, 몇 가지 사항을 변경해야합니다. 귀하의 질문에 대답하기 위해 변수 중 하나가 삽입 될 때 비어있을 가능성이 높습니다.

귀하의 코드가 광범위하게 주입 공격에 개방되어있다. 변수를 데이터베이스에 저장하기 전에 점검하십시오. 내 이름을 "Tom; 드롭 테이블 사용자"로 입력하면 어떻게됩니까? 그리고 당신의 코드가 그냥 달렸어요?

1

명백한 실수는 두 개 이상의 열이있는 테이블에 대해 하나의 값만 삽입한다는 것입니다. 라인에서

$res = mysql_query($sql,$con) or die(mysql_error()); 

$의 SQL 문자열을

"INSERT INTO $DB_Table VALUES('$passwort')"; 
관련 문제