php操作Access数据库

php操作Access数据库

 

<?php
/*************************************
* 数据库处理acces
* 创建人: huang_xiang
* 创建时间:2009-10-19 18:49
* 更新时间:2009-10-19 18:49
************************************
*/
function mysql_acess($H_sql){
$H_sqlar = array(); /** 解析出的参数 */
$H_opton_i = strpos($H_sql," ");
$H_sqlar['opton'] = trim(substr($H_sql,0,$H_opton_i));
$H_filed_i = strpos($H_sql,"from");
$H_filed_s = substr($H_sql,$H_opton_i,$H_filed_i-$H_opton_i);
if(strrpos($H_filed_s,",")){
$H_filed_a = array();
$H_filed_t = explode(",",$H_filed_s);
foreach($H_filed_t as $H_val){
$H_filed_m = explode(" as ",$H_val);
if(strrpos($H_val,"as")) $H_filed_a[$H_filed_m[0]] = $H_filed_m[1];
else $H_filed_a[$H_val] = $H_val;
}
}else $H_filed_a = array('*' => '*');
$H_sqlar['filed'] = array($H_filed_s,$H_filed_a);

$H_where_i = strpos($H_sql,"where");
if($H_where_i){
$H_sqlar['wheref'] = true;
$H_sqlar['from'] = substr($H_sql,$H_filed_i,$H_where_i-$H_filed_i);
}else{
$H_sqlar['wheref'] = false;
$H_where_i = $H_filed_i;
}
$H_limit_i = strrpos($H_sql,"limit");
if($H_limit_i){
$H_limit_s = trim(substr($H_sql,$H_limit_i+6,strlen($H_sql)-$H_limit_i));
$H_sql = substr($H_sql,0,$H_limit_i);
if(strrpos($H_limit_s,",")){
$H_explm = explode(",",$H_limit_s);
$H_index = intval($H_explm[0]);
$H_sizes = intval($H_explm[1]);
}else{
$H_index = 0;
$H_sizes = intval($H_limit_s);
}
$H_sqlar['limit'] = array("limit ".$H_limit_s,$H_index,$H_sizes);
}else{
$H_limit_i = strlen($H_sql);
$H_sqlar['limit'] = -1;
}
$H_order_i = strrpos($H_sql,"order by");
if($H_order_i){
$H_sqlar['where'] = substr($H_sql,$H_where_i,$H_order_i-$H_where_i);
$H_sqlar['order'] = substr($H_sql,$H_order_i,$H_limit_i-$H_order_i);
}else{
$H_sqlar['where'] = substr($H_sql,$H_where_i,strlen($H_sql)-$H_where_i);
$H_sqlar['order'] = "";
}
$H_sqlxa = $H_sqlar['opton'].(($H_sqlar['limit'] == -1)?'':(" top ".$H_sqlar['limit'][2])).$H_sqlar['filed'][0].$H_sqlar['from'].$H_sqlar['where'];
$H_sqlxb = $H_sqlar['opton']." count(*) as H_sumss ".$H_sqlar['from'].$H_sqlar['where'];
if($H_sqlar['limit'][1] > 0){
$H_sql = trim($H_sqlxa.($H_sqlar['wheref'] ?' and':' where ')." id >= ".$H_sqlar['limit'][1]." ".$H_sqlar['order']);
}else $H_sql = trim($H_sqlxa.$H_sqlar['order']);
$H_sqln = trim($H_sqlxb);

return array('datas' => $H_sqlar,'sql' => $H_sql,'sqln' => $H_sqln);
}

function conn(){
$H_data_mdbs = 'data.mdb'; /** 数据库文件 */
$H_data_user = 'tx'; /** 用户名 */
$H_data_pass = 'yin273642232'; /** 密码 */
$H_const="DRIVER={Microsoft Access Driver (*.mdb)};DBQ=".realpath($H_data_mdbs).";";
$H_conn=odbc_connect($H_const,$H_data_user,$H_data_pass,SQL_CUR_USE_ODBC); /** 连接数据库 */
return $H_conn;
}

function get_datas($H_conn,$H_sql,$H_sqln,$H_sqlar){
$H_resid = odbc_do($H_conn, $H_sqln); /** 执行sql */
$H_sumss = 0; /** 总记录数 */
$H_sizes = 12; /** 每页条数 */
$H_count = 0; /** 总页数 */
$H_start = $H_sqlar['limit'][1]; /** 开始数 */
$H_stops = $H_sqlar['limit'][2]; /** 结束数 */
while(odbc_fetch_row($H_resid)){ $H_sumss = odbc_result($H_resid,'H_sumss'); break;}
$H_count = $H_sumss < 1 ? 0 : ceil($H_sumss/$H_sizes);
$H_resid = odbc_do($H_conn, $H_sql);
$H_file_len = odbc_num_fields($H_resid);
$H_datas = array();
while(odbc_fetch_row($H_resid)){
$H_dataf = array();
for($H_i =1;$H_i <= $H_file_len;$H_i++){
$H_tname = odbc_field_name($H_resid,$H_i);
$H_tresu = odbc_result($H_resid,$H_i);
$H_dataf[$H_i-1] = $H_tresu;
$H_dataf[$H_tname] = $H_tresu;
}
$H_datas[] = $H_dataf;
}
return $H_datas;
}


$H_conn= conn();
echo '原有SQL: ',$H_sql = "select * from data_basic where basnm like '%k%' order by id limit 6,12";
echo '<br />';
$H_acsql = mysql_acess($H_sql);
echo '记录SQL: ',$H_sql = $H_acsql['sql'];
echo '<br />';
echo '条数SQL: ',$H_sqln = $H_acsql['sqln'];
echo '<br />';
$H_datas = get_datas($H_conn,$H_sql,$H_sqln,$H_sqlar);
odbc_close($H_conn);

echo '<pre>';
print_r($H_datas);
echo '</pre>';
?>

 

 

 

posted @ 2012-01-17 15:04  祥辉  阅读(429)  评论(0编辑  收藏  举报