douyong6585 2013-03-08 04:01
浏览 42

php脚本从sql表中检索枚举值

I posted the below on stackexchange for code review. But I just realized that what I am asking could be a legit question for SO. Please let me know if you think otherwise.

I have an sql table with multiple fields and 4 of them are enums. I wrote a script that runs thought the table and retrieve the enums and put them in a 2 dimension array.

Unfortunately this script is extreamly slow and I can't fix it.

<?php

require_once('mySQL_Connect.php');

$con = ConnectToDataBase();
if ($con == false)
{
    //data returned will be null
    exit;
}

$db = 'courses_db';
$table = 'courses';

$fields = array(
'training_field',
'speciality_field',
'type',
'language');

$enums = array();

foreach ($fields as $colomn) {
$sq1 = "SELECT 
            column_type 
        FROM 
            information_schema.columns 
        WHERE 
            table_schema = '$db' 
        AND 
            table_name = '$table'
        AND 
            column_name = '$colomn'";
$query =  mysqli_query($con,$sq1);

$stack = array();   
$i = 0;
$stack[$i]=$colomn;
if ($fetch = mysqli_fetch_assoc($query) )
{
    $enum = $fetch['column_type'];
    $off = strpos($enum,"(");
    $enum = substr($enum, $off+1, strlen($enum)-$off-2);
    $values = explode(",",$enum);

    // For each value in the array, remove the leading and trailing
    // single quotes, convert two single quotes to one. Put the result
    // back in the array in the same form as CodeCharge needs.

    for( $n = 0; $n < Count($values); $n++) {
    $val = substr( $values[$n], 1,strlen($values[$n])-2);
    $val = str_replace("''","'",$val);
    $stack[$i+1]=$val;
    $i++;
    }
}
    // return the values array to the caller
    //echo json_encode( $stack);
    array_push($enums,$stack);
    reset($stack);
}
echo json_encode($enums);
?> 
  • 写回答

2条回答 默认 最新

  • dqn48247 2013-03-17 22:16
    关注

    I finally found a solution and here it is (Hope this will be useful for someone):

    function get_enum_values($connection, $table, $field )
    {
    
        $query = " SHOW COLUMNS FROM `$table` LIKE '$field' ";
        $result = mysqli_query($connection, $query );
        $row = mysqli_fetch_array($result , MYSQL_NUM );
        #extract the values
        #the values are enclosed in single quotes
        #and separated by commas
        $regex = "/'(.*?)'/";
        preg_match_all( $regex , $row[1], $enum_array );
        $enum_fields = $enum_array[1];
    
        return( $enum_fields );
    }
    

    So basically there's no need to go through information_schema!

    Credit goes to this blog:

    http://akinas.com/pages/en/blog/mysql_enum/

    评论

报告相同问题?

悬赏问题

  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?