0

次のように、ジオネーム Web サービスを実装しています。

$( "#loc_from" ).autocomplete({
    source: function( request, response ) {
        $.ajax({
            url: "http://ws.geonames.org/searchJSON",
            dataType: "jsonp",
            data: {
                featureClass: "P",
                style: "full",
                maxRows: 12,
                name_startsWith: request.term,
                searchlang: 'ES'
            },
            success: function( data ) {
                response( $.map( data.geonames, function( item ) {
                    item.label = item.name + (item.adminName1 ? ", " + item.adminName1 : "") + ", " + item.countryName;
                    return item;
                }));
            }
        });
    },
    minLength: 2,
    select: function( event, ui ) {
         ui.item.task = 'new_city';
         $.post('/includes/router.php', ui.item , function(){

         });
         $('#id_loc').val(ui.item.gid);
         //alert(ui.item.gid);
    }
});

router.php の場所:

case 'new_city':
    /* comprobar si exite */
    $query = "SELECT geonameid FROM geonames";
    if(count(cache_query($query))>0){
        /* Its already in my database */
    }else{
        foreach ($_POST as $key => $value) {
                    check_field($key);
            echo $key.': '.$value.'<br>';
        }
    }
    /* si no existe, dar de alta*/
    break;

したがって、関数check_field($key)で geonames.$key フィールドが存在するかどうかを確認し、テーブルを変更して追加したいと思います。

それは可能ですか?(また、これをお勧めしますか?)

4

3 に答える 3

1

私はあなたがこれを探していると思います

SELECT * 
FROM information_schema.COLUMNS 
WHERE TABLE_SCHEMA = 'db_name' 
AND TABLE_NAME = 'geonames' 
AND COLUMN_NAME = 'column_name'

PHPからこれを行うことができます

function add_column_if_not_exist($db, $column, $column_attr = "VARCHAR( 255 ) NULL" ){
    $exists = false;
    $columns = mysql_query("show columns from $db");
    while($c = mysql_fetch_assoc($columns)){
        if($c['Field'] == $column){
            $exists = true;
            break;
        }
    }      
    if(!$exists){
        mysql_query("ALTER TABLE `$db` ADD `$column`  $column_attr");
    }
}
于 2013-01-31T10:52:40.827 に答える
1

あなたの質問の1つに答えるために:動的にテーブルを拡張することは決して良い考えではありません。

テーブルを静的に保つ良い方法は、ルックアップテーブルを使用することです。

例えば:

表1にはフィールドがあります。

id, name

表2にはフィールドがあります。

id, name_of_dynamically_added_item

ルックアップテーブルは次のようになります。

id, id_table1, id_table2

テーブルに列を追加する代わりに、table2に行を追加できます。table1の行にリンクする必要があるアイテムごとに、ルックアップテーブルに行を追加できます。

このようにして、予測できない量の列を持つテーブルを作成することは決してありません。また、ほとんどがNULL値で埋められる行はありません。

于 2013-01-31T11:22:49.960 に答える
0
$sql= "SELECT * FROM users WHERE id='1'";
$query = mysqli_query($conn, $sql);
$row=mysqli_fetch_array($query, MYSQL_ASSOC);
if($row['id']=="" || NULL){
echo "id=5 do not exits";
//then create one
}
else{
echo "user exist";
}
于 2013-10-22T06:22:02.247 に答える