2011-10-09 3 views
1

아직 게시 양식을 설정하지 않았으므로 일부 테스트 데이터로 생성 된 사전 구성된 배열이 있습니다. 배열은 다음과 같습니다MySQL 구문 오류 - 쿼리 배열

$query = mysql_query("INSERT INTO `Developers` (`Name`,`Email`,`Username`,`Password`,`Location`,`Platform`,`Developer_or_Designer`,`Tags`, `Paypal_Email`) VALUES (" . $ud['name'] . ", " . $ud['email'] . ", " . $ud['username'] . ", " .$ud['password'] . ", " . $ud['location'] . ", " . $ud['platform'] . ", " . $ud['developer_or_designer'] . ", " . $ud['tags'] . ", " . $ud['paypal_email'] . ")") or die(mysql_error()); 

그러나, 다음과 같은 오류와 함께 사망 :

이 배열에서
$ud = array('name' => 'name', 'username' => 'username', 'password' => 'password', 'location' => 'london', 'platform' => 'mobile', 'developer_or_designer' => 'developer', 'tags' => 'hello', 'paypal_email' => '[email protected]', 'developer_or_client' => 'developer', 'email' => '[email protected]'); 

foreach ($ud as $key => $value) { 
    $value = mysql_real_escape_string($value); 
} 

, 그때 내 데이터베이스로 MySQL의 쿼리를 통해 데이터를 삽입하려고

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@email.com, username, password, london, mobile, developer, hello, [email protected])' at line 1

어디에서 잘못 될지 알려주실 수 있습니까?

답변

0
$query = mysql_query("INSERT INTO `Developers` (`Name`,`Email`,`Username`,`Password`,`Location`,`Platform`,`Developer_or_Designer`,`Tags`, `Paypal_Email`) VALUES ('" . $ud['name'] . "', '" . $ud['email'] . "', '" . $ud['username'] . "', '" .$ud['password'] . "', '" . $ud['location'] . "', '" . $ud['platform'] . "', '" . $ud['developer_or_designer'] . "', '" . $ud['tags'] . "', '" . $ud['paypal_email'] . "')") or die(mysql_error()); 

그것을 시도 : 당신이 따옴표와 함께 당신의 가치를 포장 할 필요가 그래서 사람들은 varchar 열 종류 열 이름의 소리에서

0

parenthases의 각 값에 따옴표가 필요합니다

$query = mysql_query("INSERT INTO `Developers` (`Name`,`Email`,`Username`,`Password`,`Location`,`Platform`,`Developer_or_Designer`,`Tags`, `Paypal_Email`) VALUES ('" . $ud['name'] . "', '" . $ud['email'] . "', '" . $ud['username'] . "', '" .$ud['password'] . "', '" . $ud['location'] . "', '" . $ud['platform'] . "', '" . $ud['developer_or_designer'] . "', '" . $ud['tags'] . "', '" . $ud['paypal_email'] . "')") or die(mysql_error()); 

또한 값이 사용자 입력에서 오는 경우을 통해 각 값을 실행하여 SQL 주입 공격

+0

업데이트를 확인하시기 바랍니다 (numberic가 아닌 경우). 당신은 여전히 ​​따옴표가 필요 –

+0

,'mysql_real_escape_string'의 살균 입력이 유효하지만 쿼리에 필요한 따옴표를 추가하지 않음 – Clive

+0

또한 mysql_real_escape_string에 참조로 값에 액세스해야하는 효과가 필요하면 'foreach ($ ud as $ key => & $ 값) {'... – Clive

1

두 가지 :

  1. As Jeff notes, 당신은 문자열 주위에 따옴표를 넣어해야합니다.
  2. 따옴표를 붙이기 전에 각 문자열을 mysql_real_escape_sring()에 전달해야합니다.
+0

전에 mysql_real_escape_string을 실행하고있다. –

0

이를 참조하십시오

값 ("$ UD [ '이름'].."

Nedd 그 :

VALUES ('. "$ UD ['이름 '] . " '

그리고 너무 다른 컬럼에 대한