【问题标题】:insert multiple data插入多个数据
【发布时间】:2011-08-11 17:37:59
【问题描述】:

我怎么做错了我想从数组中插入数据库数据:

$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;
}

我确实打印了 $we:

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

不行,求帮助 php

【问题讨论】:

    标签: php mysql insert


    【解决方案1】:

    我真的建议避免使用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;
    

    【讨论】:

    • MySQL 也允许使用 SET 语法。
    【解决方案2】:
    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());
    }
    

    【讨论】:

      【解决方案3】:
      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;
      }
      

      【讨论】:

        【解决方案4】:

        你需要在(name = "test") (login = "testt")之间用“,”分隔(name = "test"), (login = "testt")

        另一种方法是:
        INSERT INTO user (name, login) VALUES ("test", "testt")

        【讨论】:

        • 我如何从 foreach 获取名称和登录?
        猜你喜欢
        • 2014-12-08
        • 1970-01-01
        • 2021-09-10
        • 2014-06-08
        • 2021-03-25
        • 2014-12-02
        • 2018-09-27
        • 1970-01-01
        相关资源
        最近更新 更多