如果我要写一个插入数据库的函数表现形式为
$data['title']='123';
$data['content']='345';
$this->add($data,"table");
这种形式,函数太难实现了,,我发现难点,不确定因素太多,,字段值可能为int,string型,,不好把握求解惑谁能写出这个函数。
$data['title']='123';
$data['content']='345';
$this->add($data,"table");
这种形式,函数太难实现了,,我发现难点,不确定因素太多,,字段值可能为int,string型,,不好把握求解惑谁能写出这个函数。
给个参考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");
{
$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;
}
因为 int 型的 加引号照样insert。能不能用,你试试就知道了。
如果有特殊的类型,比如验证是否为日期,就得另外写代码了。
在写入数据库前,不妨对插入的数据转义一下,即mysql_real_escape_string(),防注入。