0

データベーステーブルがまだ存在しない場合は、データベーステーブルを作成するための次のコードがあります。次に、現在のユーザーがデータベースに存在するかどうかを確認します。これを行うには、IDがデバイスIDと等しいユーザーを選択します。コードは今、hello worldを出力してから、フォームに移動する必要があります。ただし、コードを実行しても何も起こらず、エラーも印刷ステートメントもありません。なぜこれが起こっているのか考えはありますか?

local tablesetup = [[CREATE TABLE IF NOT EXISTS User (id VARCHAR(255) PRIMARY KEY, name);]]
    db:exec(tablesetup)

    --Check if the user is in the database already
    for row in db:nrows("SELECT * FROM User WHERE id = " .. "'" .. system.getInfo("deviceID") .. "'") do
        print("hello")
        if(row.id == nil) then
            print("world")
            storyboard.gotoScene("forms")
        end
    end
4

1 に答える 1

3

nrowsクエリによって生成されたすべての行を返します。クエリで行が生成されなかった場合(たとえば、探しているアイテムが見つからなかったため)、ループは開始されません。クエリに一致する行がなかったためです。

クエリが成功したかどうかを検出する場合は、実際にそれを確認する必要があります。

また、文字列連結を使用したクエリの作成は停止してください。適切な値バインディングでプリペアドステートメントを使用する方法を学びます。これははるかにクリーンで、SQLインジェクション攻撃にさらされないという利点があります。

于 2012-05-27T20:02:07.360 に答える