2013-01-31 38 views
0

我實現GEONAMES web服務,像這樣:檢查一個MySQL領域存在創造如果沒有

$("#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字段是否存在,並修改表並添加它。

這是可行嗎? (另外,你建議嗎?)

+0

爲什麼不在編寫代碼之前在MySQL表中添加鍵字段?要回答你的問題,是的,它可以完成,但這是一個不好的方法。 – Achrome

+0

因爲響應每次都會返回不同的字段 –

回答

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"); 
    } 
} 
+0

您好,這樣會檢查是否存在。如何修改表格並添加字段? –

+1

更新了我的答案 –

1

爲了回答您的問題之一:動態擴展表從不是一個好主意imho。

保持靜態表的一個好方法是使用查找表。

例如:

表1具有字段:

id, name 

表2具有字段:

id, name_of_dynamically_added_item 

查找表看起來像這樣:

id, id_table1, id_table2 

相反增加一個柱子n添加到任何表格,您可以向table2添加一行。 對於每個應鏈接到table1中的行的項目,可以向查找表中添加一行。

這樣你就永遠不會創建一個列數不可預見的表格。你也不會有大部分爲NULL值的行。

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"; 
} 
相關問題