1

我在 stackexchange 上发布了以下内容以进行代码审查。但我刚刚意识到我要问的问题对于 SO 来说可能是一个合法的问题。如果您不这么认为,请告诉我。

我有一个包含多个字段的 sql 表,其中 4 个是枚举。我编写了一个脚本,运行该表并检索枚举并将它们放入二维数组中。

不幸的是,这个脚本非常慢,我无法修复它。

<?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);
?> 
4

2 回答 2

2

我终于找到了一个解决方案,就在这里(希望这对某人有用):

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 );
}

所以基本上不需要通过information_schema!

归功于此博客:

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

于 2013-03-17T22:16:24.483 回答
0

正如原始问题中提到的 CodeCharge 一样,CCS 在线帮助中有一个示例,位于Utilize MySQL Enum Field Type下。示例代码与上面类似,但也有多种语言版本。

于 2013-10-09T03:00:14.870 回答