您的位置:首页 > 数据库

自动生成简单的sql语句

2012-08-04 18:24 281 查看


$sql .= "id='" . $arr['id'] . "'";

$sql .= "id='{$arr['id']}'";

$sql .= "id='$arr[id]'";


最近试了一下生成sql语句不同写法的速度,在上面三种中, 第三种最慢,但没慢多少(顶多20%)。

第一种比较麻烦,但方便写成 $sql .= "id='" . func( $arr['id'] ) . "'"; 。至于把在双引号中的变量用{}括起来,是一个好的php编程习惯。但不要犯下面的错误。

最慢的是这种写法 -- $sql .= "id='{$arr[id]}'"; 。慢几倍啊。

很多的 insert和update语句都是重复劳动 。所以最近写了两个函数,应该可以应付多数情况。如下。

function create_insert($arr_data, $arr_in_up)
{
$sql = '(';
$sql2 = '';
foreach($arr_in_up as $k=>$v)
{
$sql .= $k . ',';
$sql2 .= add_comma( $arr_data[$v] );
}
return substr($sql, 0, -1) . ') values (' .
substr($sql2, 0, -1) . ');';
}

function create_update($arr_data, $arr_in_up)
{
$sql = ' ';
foreach($arr_in_up as $k=>$v)
{
$sql .= $k . '=' . add_comma( $arr_data[$v] );
}
return substr($sql, 0, -1) . ' ';
}

function add_comma($str)
{
if($str == '' || $str == 'undefined'){
return 'NULL,';
}else{
return '\'' . htmlspecialchars($str) . '\',';
}
}


//使用方法

$arr = Get_Post_Get();//用pg_sql什么的转义

$arr['time'] = date('Y-m-d g:i:s');

$arr_in_up = array(
'id' => 'id',
'date' => 'time'
);

//$arr_in_up = array();
//$arr_in_up['id'] = 'id';
//$arr_in_up['date'] = 'time';

$sql = 'insert into test ' . create_insert($arr, $arr_in_up);


很干净的代码。不过有时候写$arr_in_up也会很长,可以让程序自动生成。

我的方法是先把$arr_in_up的值放到 一个csv文件中,反正我们公司的数据库说明也是类似的表格格式,很方便拷。

id,id,x

date,time,x

abc,efg,

csv大约就是这样

//读取CSV
$row = 1;
$handle = fopen('insert.csv','r');
while ($data = fgetcsv($handle, 1000, ","))
{
$num = count($data);
$row++;

for ($i=0; $i < $num; $i++) {
if ($i==0){
$aaa[]=$data[$i];
}
if ($i==1){
$aaa1[]=$data[$i];
}
if ($i==2){
$aaa2[]=$data[$i];
}
}
}

//
$arr_in_up = '$arr_in_up';
$i=0;
foreach($aaa as $val)
{
if( $aaa2[$i] != '' )//如果csv的第三格为空就不输出
{
$b__ .= "
{$arr_in_up}['{$val}'] = '{$aaa1[$i]}';";

}
$i++;
}
$i=0;

//echo $a__;
echo '
';
echo $b__;


打开php网页,看源代码,就看到自动生成的代码了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: