【问题标题】:Inserting a Variable Into SQL Table将变量插入 SQL 表
【发布时间】:2012-06-27 18:37:09
【问题描述】:

我似乎无法将用户输入的数据放入表格然后打印。

到目前为止,这是我的代码:

<!DOCTYPE HTML>
<html>
<head>
<script type="text/javascript">
var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024);
function submit() {
        var input = document.getElementById("save_name").value;
        localStorage.setItem("inputed_name", input);
        var msg;
        db.transaction(function (tx) 
        {
            tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log varchar(50))');
            tx.executeSql('delete from LOGS'); // Clears table (for debugging)

            tx.executeSql('INSERT INTO LOGS (id, log) VALUES (1, localStorage.inputed_name)');
            msg = '<p>Log message created and row inserted.</p>';
            document.querySelector('#status').innerHTML = msg;
        });

        db.transaction(function (tx) {
            tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) {
                var len = results.rows.length, i;
                msg = "<p>Found rows: " + len + "</p>";
                document.querySelector('#status').innerHTML += msg;
                for (i = 0; i < len; i++) {
                    msg = "<p><b>" + results.rows.item(i).log + "</b></p>";
                    document.querySelector('#status').innerHTML += msg;
                }
            }, null);
        });
}
</script>
</head>
<body>
<div id="status" name="status">Status Message</div>
<p>Enter data: <input type="text" id="save_name" name="inputed_name" /><br/></p>
<p><button onclick="submit()" type="button">Submit Data</button></p> <!--Should print data from the table-->
</body>
</html>

我从here得到了这个“模板”/开始

已解决

现在我想在我的表中添加两个变量,原始日志变量和第二个用作时间戳

function submit() 
{
    var input = document.getElementById("save_name").value;
    var msg;
    var time_stamp = new Date();

    db.transaction(function (tx) 
    {
        tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id auto_increment, date_time varchar(128), log varchar(64))');
        tx.executeSql('INSERT INTO LOGS (log, date_time) VALUES (?, ?)', [input, time_stamp]); // <--Problem here!
        msg = '<p>Log message created and row inserted.</p>';
        document.querySelector('#status').innerHTML = msg;
    });
}

其余代码同上。 我认为这会起作用,但是当我测试它时,表中没有任何内容。

【问题讨论】:

  • 尽管我不知道这是用于什么数据库(并且像 Mark Byers 一样想知道),但我认为问题与插入查询中的 localStorage.inputed_name 引用有关.
  • @MarkByers:看起来像是基于 Sqlite 的 JavaScript 浏览器中的本地存储,用于所有意图和目的。
  • @Mitch:db 来自哪里?此外,显示您的 HTML。您不能将 getElementById 与元素中的 name 属性一起使用。
  • 科里是这么说的。 @AndriyM 我怀疑这是问题所在,但我找不到将变量插入表中的方法
  • @MitchellByrd:请参阅下面的答案。您需要“参数化”您的输入。

标签: javascript sql html


【解决方案1】:

我认为您只需要更改获取和插入值的方式(此外,您在这一行的 SQL 中有语法错误):

var input = document.getElementById('someId').value;

...
tx.executeSql('INSERT INTO LOGS (id, log) VALUES (1, ?)', [input]);
...

我认为您可以完全忘记 localStorage 变量,除非您需要保留这些值。

【讨论】:

  • 是的,或者类似:'INSERT INTO LOGS (id, log) VALUES (1, ' + localStorage.getItem("inputed_name") + ')'
  • @MitchellByrd:不客气。另外,欢迎来到 StackOverflow。如果可以,请记住通过单击旁边的复选标记来标记解决了您的问题的答案。这样可以提高您的回答率,并降低人们忽略您的问题的风险。
  • @SeanW:Cory's 是首选方法。像您建议的连接参数会打开 OP 到 SQL 注入。此外,如果log 是字符串类型的列,则需要在值周围添加引号。
  • @Cory 谢谢。现在是一个快速的问题,我想插入两个变量。我会做类似“tx.executeSql('INSERT INTO LOGS (log, date_time) VALUES (?, ?)', [input, time]);”
  • @Cory 当我这样做时,实际上没有任何东西进入表格。我应该对我的源代码提出另一个问题并将其链接给您吗?
【解决方案2】:

要将多个变量插入表中,请使用以下格式。

tx.executeSql('INSERT INTO CacheRequest (key,value) VALUES (?,?)',[variableKey,variableValue]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多