вставить несколько данных - PullRequest
       2

вставить несколько данных

2 голосов
/ 11 августа 2011

как я делаю неправильно, я хочу вставить данные в БД из массива:

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

но я не могу использовать SET, потому что конец запроса - char,

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")

не работает, помогите пожалуйста PHP

Ответы [ 4 ]

3 голосов
/ 11 августа 2011

Я действительно рекомендую избегать SET.Это гораздо реже, и при выборе между чем-то необычным и чем-то общим, всегда идите с общим - это означает более широкую, быструю и лучшую поддержку со стороны вашего сообщества.

Вот как вы 'Подойдем к этой проблеме без нее:

Если в вашей таблице USER есть только два столбца, вы можете просто использовать VALUES, за которым следует список списков данных, разделенный запятыми:

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

Ваша функция не выглядит так, как будто она предназначена для этого, но это полезно знать в любом случае.

Но похоже, что вы вставляете по имени столбца (в общем, хорошая идея):

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

С PHP это становится:

$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;
1 голос
/ 11 августа 2011
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());
}
0 голосов
/ 11 августа 2011
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;
}
0 голосов
/ 11 августа 2011

Вы должны разделить (name = "test") (login = "testt") с "," между ними (name = "test"), (login = "testt")

Другой способ сделать это:
INSERT INTO user (name, login) VALUES ("test", "testt")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...