2011-08-11 5 views
2
내가 배열에서 데이터를 dB로 삽입하려는 잘못된 어떻게

:삽입 여러 데이터

$tabb = array(
    'name' => 'test', 
    'login' => 'testt'); 

하지만 쿼리의 끝 문자이기 때문에 내가, SET를 사용하지 못할.

public function insert($table, $values){ 

if($this->database){ 
print_r($values); 
$we = 'INSERT INTO '. $table .' SET '; 
foreach($values as $value => $key) { 
$we .= ' ('. $value .' = "'. $key .'") '; 
} 
print $we; 
mysql_query($we); 

} 
return true; 
} 

우리는 $ 인쇄하는 :

INSERT INTO user SET (name = "test") (login = "testt") 

작동하지,

답변

0
public function insert($table, $values) 
{ 
    if($this->database) 
    { 
     print_r($values); 
     $we = 'INSERT INTO '. $table .' SET '; 
     $sep = ''; 
     foreach($values as $value => $key) 
     { 
      $we .= $sep . ' ('. $value .' = "'. mysql_real_escape_string($key) .'") '; 
      $sep = ','; 
     } 
     print $we; 
     mysql_query($we); 
    } 
    return true; 
} 

또는 당신이 까다로운 일이 될하려는 경우는 :

public function insert($table, $values) 
{ 
    if($this->database) 
    { 
     print_r($values); 
     $we = "insert into `".$table. "` (`". implode('`,`',array_keys($fields))."`) values ('".implode("','",array_map('mysql_real_escape_string', $fields))."');"; 
     print $we; 
     mysql_query($we); 
    } 
    return true; 
} 
3

정말 SET을 피하는 것이 좋습니다 PHP를 도와주세요. 희소하고 무언가 사이에서 선택의 여지가있는 것은 일반적인 것이 아니며 항상 공통점을 가지고 있습니다. 이는 지역 사회가보다 광범위하고 신속하며 더 나은 지원을한다는 것을 의미합니다. 당신은 단지 당신의 USER 테이블에 두 개의 열이있는 경우,

당신은 단순히 데이터 세트의 쉼표 묘사 목록 다음 VALUES 사용할 수 있습니다 :

INSERT INTO user VALUES ("test","testt"),("test2","testt2") 
을 여기

당신이 그것을하지 않고 그 문제를 접근하는 것 방법

귀하의 기능은이 방향으로 향한 것처럼 보이지 않지만 어느 쪽인지 아는 것이 좋습니다.

하지만 열 이름 (일반적으로 좋은 생각)에 의해 삽입하는 것 같습니다 :이되고 PHP와

INSERT INTO user (name, login) VALUES ("test","testt") 

:

$items = array_map('mysql_real_escape_string', $values); 
$items = '(\'' . implode('\',\'', $items) . '\')'; 
$q = 'INSERT INTO '. 
     $table . 
    // using implode with array_keys assumes that you know all of the keys 
    // ahead of time. If you don't, I MUST suggest your re-think your code 
    // omit the following line if you want to follow the first SQL example 
    ' (' . implode(',', array_keys($values) . ') '. 
    ' VALUES ' . 
    $items; 
+0

MySQL은 또한 SET 구문을 할 수 있습니다. –

0

은 당신이 (name = "test") (login = "testt")을 분리해서해야합니다 "," 그 사이에 (name = "test"), (login = "testt")

또 다른 방법은 다음과 같습니다.
INSERT INTO user (name, login) VALUES ("test", "testt")

+0

어떻게 이름을 지정하고 foreach에서 로그인 할 수 있습니까? – xyz

1
public function insert($table, $values){ 
    $fields = array(); 
    $data = array(); 
    foreach ($values as $key => $val) { 
     $fields[] = mysql_real_escape_string($key); 
     $data[] = mysql_real_escape_string($val); 
    } 
    $fields = implode(',', $fields); 
    $data = implode(',', $data) 

    $sql = "INSERT INTO $table ($fields) VALUES ($data);" 
    mysql_query($sql) or die(mysql_error()); 
}