Luaのテーブルはオブジェクト。
そのため、テーブルのコピーは結果として、参照先がコピーされる。
なので、下記のような現象が起きる。へー。っていう感じ。

local TableTestA ={}
local TableTestB ={}
TableTestA["a"]=10
print("TableTestA[a]:"..TableTestA["a"])  → TableTestA[a]:10 と表示される。
TableTestB=TableTestA            ← テーブルをコピー(参照先がコピーされる)
print("TableTestB[a]:"..TableTestB["a"])  → TableTestB[a]:10 と表示される。
TableTestB["a"]=20               ← Bの方で値を20に変更作業をする。
print("TableTestA[a]:"..TableTestA["a"])  → TableTestA[a]:20 と表示される。←これも変更される。
print("TableTestB[a]:"..TableTestB["a"])  → TableTestB[a]:20 と表示される。←これは当たり前
TableTestA = nil
print("TableTestB[a]:"..TableTestB["a"])  → TableTestB[a]:20 と表示される。

ランキング機能の作成のために、WEB側(PHP)で管理用のコードを記載しているが
新規IDの発行が上手く行かない…。ダミーでID最大値12ぐらいまで作っても、MAXで返ってくる値が9とオカシイ。よくよく調べてみると、IDがテキスト型になっていたからダメで、int型と明示してやればMAX関数が使えた。

//-------------------------------------------------
//  ランキング管理用IDを生成
//-------------------------------------------------
function func_makeID($Settei){

//データベース存在確認
$ext = file_exists($Settei['db_name']);

//今日の日付を取得(2038年問題対応版)
$today = new DateTime(); //本日
$db_today = $today->format('Y-m-d H:i:s');

//データベースを開く
$db = new SQLite3($Settei['db_name']); //SQLite3の構文

if (!$ext){
//データベースが無ければ TABLE作成
//※テーブル名:highscore
//※データ内容:ID,名前,スコア,更新日,作成日
$query = "CREATE TABLE highscore (db_playid int, db_playname , db_score , db_updatedate , db_createdate)";
$db->query($query);
//ダミーデータの登録
$query = "INSERT INTO highscore VALUES(1,'dummy',0,'$db_today','$db_today')";
$db->query($query);
}

//データベースが在れば現在のID最大値を調べる
$query = "SELECT MAX(db_playid) FROM highscore"; //idの最大値を取得する
$results = $db->query($query); //データベースからデータを引っ張ってくる
$arr = $results->fetchArray(SQLITE3_ASSOC);
$maxno = $arr["MAX(db_playid)"];

//新規IDの発行
$newplayid = $maxno + 1;
$query = "INSERT INTO highscore VALUES($newplayid,'NoName',0,'$db_today','$db_today')";
$db->query($query);

print("NewPlayID:".$newplayid);

$db->close(); //データベースの切断 SQLite3

↑このページのトップヘ