经常在许多框架中看到直接使用了数组作为写入数据或者查询数据库的参数,形如insert($_POST=array('content'=>'Hello World!','author_id'=>3));或者 fetch(array('status'=>'public','type'=>'post')); 这样的调用方法,如何实现数组数据中的键和值分别作为SQL语句中的列和value呢?其实非常简单:

implode()方法

主要用到了PHP自带的implode()方法,implode()方法可一将数组元素转化成使用指定字符连接的字符串:

$array = array('status'=>'public','type'=>'qubble','id'=>'3','catagorie'=>'default');
echo implode('-',$array);

输出:

public-qubble-3-default

array_keys()方法

同样的,使用array_keys()方法可以将数组中的键转化成一个新数组:

$keys = array_keys($array);
var_dump($keys);

输出:

array('status','type','id','catagorie')

我们尝试写一条插入数据库的语句:

$code = "insert into `topics`";
$code .=  " (`".implode("`, `", array_keys($array))."`)";
echo $code .= " VALUES ('".implode("', '", $array)."') ";

输出:

insert into `topics` (`status`, `type`, `id`, `catagorie`) vaules ('public', 'qubble', '3', 'default')

array_values()方法

array_values()方法可以提取出数组中的值生成一个新数组。

我们再继续尝试写一条条件查询语句:

$array = array('status'=>'public','author'=>'3212','catagorie'=>'7');
$keys = array_keys($array);
$values = array_values($array);
$sql = "select * from table where";
// 核心语句 用来生成AND条件语句
foreach ($keys as $key=>$value){
    $sql .='`'.$value.'`=';
    $sql .='\''.$values[$key].'\' ';
    if(@$values[$key+1]!=false){
      $sql .='and '; 
    }
}
echo $sql;

输出:

select * from table where `status`='public' and `author`='3212' and `catagorie`='7'

标签: SQL

分享到: