如果我要写一个插入数据库的函数表现形式为
$data['title']='123';
$data['content']='345';
$this->add($data,"table");
这种形式,函数太难实现了,,我发现难点,不确定因素太多,,字段值可能为int,string型,,不好把握求解惑谁能写出这个函数。

解决方案 »

  1.   

    这个不难的所有插入的字符都加上引号就行了。因为 int 型的 加引号照样insert。
      

  2.   

    这个要看你如何设计了
    给个参考class myModel
    {
    public function add($fields,$table)
    {
    $tbl = new $table();
    return $tbl->add($fields);
    }
    }
    class Table
    {
    public function add( $fieldArray )
    {
    foreach( $fieldArray as $k=>$v)
    {
        $fds[]  = "`{$k}`";
        $fmt[]  = "'{$this->fields[$k]}'";
        $val[]  = $v;
    }
    $sql = "insert into `".get_class( $this )."` (".implode(',',$fds).") values (".implode(',',$fmt).")"; return call_user_func_array('sprintf',array_merge(array($sql),$val));
    }
    }
    //具体表
    class article extends Table
    {
       //具体表的具体字段,字段类型自己配置
       public $fields = array('id'=>'%d','title'=>'%s','content'=>'%s');
    }
    $tx = new myModel();
    echo $tx->add(array('id'=>2,'title'=>'abcd'),"article");
      

  3.   

    楼上太强大了,,我终于恍然大悟,,所有的问题随着楼上给出的implode函数而迎刃而解
      

  4.   

    function add($ety,$table)
    {
    $ety = $this->_checkFields($ety);
    $this->sql = "INSERT INTO `".$this->table ."`(`".implode('`,`', array_keys($ety))."`) VALUES('".implode("','", $ety)."')";
    return $this->query();
    } // 根据所传递进来的数组与当前表的字段进行匹配,不相符的予以剔除
     function _checkFields($ety,$table)
    {
    $fields = array();

    $this->sql = "SHOW COLUMNS FROM ".$this->table;
    $result = $this->db->query($this->sql); 
    while($r = $result->fetch_assoc())
    {
    $fields[] = $r['Field'];

    $this->fields = $fields;
    foreach($ety AS $key=>$value)
    {
    if(!in_array($key,$fields))
    {
    unset($ety[$key]);
    }
    }
    return $ety;
    }
      

  5.   

    楼上的array_keys函数果然经典,省去了很多步骤csdn果然人才济济啊。。
      

  6.   

    $this->sql = "INSERT INTO `".$this->table ." VALUES('".implode("','", $arr)."')";所有插入的字符都加上引号就行了。
    因为 int 型的 加引号照样insert。能不能用,你试试就知道了。
      

  7.   

    不管是int还是string,所有的值都可以用单引号括上,然后写入数据库。
    如果有特殊的类型,比如验证是否为日期,就得另外写代码了。
    在写入数据库前,不妨对插入的数据转义一下,即mysql_real_escape_string(),防注入。