使用Golang将JavaScript变量插入MySQL的方法

使用Golang将JavaScript变量插入MySQL的方法 我有一个名为x的JavaScript变量,想要将这个x变量的值使用Golang插入到MySQL中。当我运行以下代码时,显示x未定义的错误。如何将JavaScript变量插入MySQL?

package main

import (
    "database/sql"
    "fmt"
    "net/http"

    _ "github.com/go-sql-driver/mysql"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, `<!DOCTYPE html>
            <html>
            <head>
                <meta charset="utf-8" />
                <meta http-equiv="X-UA-Compatible" content="IE=edge">
                <title>Page Title</title>
                <meta name="viewport" content="width=device-width, initial-scale=1">

            </head>
            <body>

<script>

var x=5;    

</script>
</body>
</html>`)

        db, err := sql.Open("mysql", "root:@tcp(127.0.0.1:3306)/test_db")
        defer db.Close()
        if err != nil {
            panic(err.Error())
        }
        insForm, err := db.Prepare("INSERT INTO number(number_position) VALUES(?)")
        if err != nil {
            panic(err.Error())
        }
        insForm.Exec(x)

    })
    http.ListenAndServe(":8080", nil)
}

更多关于使用Golang将JavaScript变量插入MySQL的方法的实战教程也可以访问 https://www.itying.com/category-94-b0.html

5 回复

我不认为这回答了问题。但当然,问题本身表述得不够清晰。

更多关于使用Golang将JavaScript变量插入MySQL的方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


JavaScript变量(var x=5;)在文本块中对Go语言而言并不是变量。你无法从Go代码中访问它。

你想实现什么功能?x 的值是否始终为 5?为什么?

哦,你说得对,我以为他想生成HTML/Javascript 😄

你必须将浏览器中的内容通过表单提交或AJAX查询发送到Go的某个端点。

The New Stack

使用Go构建Web服务器 - The New Stack

缩略图

Go(Golang.org)是一种系统编程语言,在其标准库中提供了标准的HTTP协议支持,这使得开发人员能够轻松构建并快速启动Web服务器。同时,Go为开发人员提供了很多…

这是客户端与服务器的通信,你不能在一个地方完成所有操作。

问题在于你的代码试图在Go服务器端直接访问客户端JavaScript变量x,这是不可能的。Go代码运行在服务器上,而JavaScript变量存在于客户端的浏览器中。你需要通过HTTP请求将JavaScript变量的值发送到Go服务器。

以下是修改后的解决方案:

package main

import (
    "database/sql"
    "fmt"
    "net/http"
    "log"

    _ "github.com/go-sql-driver/mysql"
)

func main() {
    db, err := sql.Open("mysql", "root:@tcp(127.0.0.1:3306)/test_db")
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    // 创建表(如果不存在)
    _, err = db.Exec(`CREATE TABLE IF NOT EXISTS number (
        id INT AUTO_INCREMENT PRIMARY KEY,
        number_position INT,
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    )`)
    if err != nil {
        log.Fatal(err)
    }

    // 处理插入请求的端点
    http.HandleFunc("/insert", func(w http.ResponseWriter, r *http.Request) {
        if r.Method != "POST" {
            http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
            return
        }

        // 从请求中获取number参数
        number := r.FormValue("number")
        if number == "" {
            http.Error(w, "Number parameter is required", http.StatusBadRequest)
            return
        }

        // 插入数据库
        insForm, err := db.Prepare("INSERT INTO number(number_position) VALUES(?)")
        if err != nil {
            http.Error(w, err.Error(), http.StatusInternalServerError)
            return
        }
        defer insForm.Close()

        _, err = insForm.Exec(number)
        if err != nil {
            http.Error(w, err.Error(), http.StatusInternalServerError)
            return
        }

        fmt.Fprintf(w, "Successfully inserted number: %s", number)
    })

    // 提供HTML页面的端点
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, `<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Insert Number to MySQL</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
    <h1>Insert Number to MySQL</h1>
    
    <script>
        var x = 5;
        
        // 使用fetch API发送数据到服务器
        function insertNumber() {
            fetch('/insert', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded',
                },
                body: 'number=' + x
            })
            .then(response => response.text())
            .then(data => {
                console.log('Success:', data);
                alert('Number inserted successfully: ' + data);
            })
            .catch((error) => {
                console.error('Error:', error);
                alert('Error inserting number');
            });
        }
        
        // 页面加载后自动插入,或者可以通过按钮触发
        window.onload = function() {
            insertNumber();
        };
    </script>
    
    <button onclick="insertNumber()">Insert Number</button>
</body>
</html>`)
    })

    log.Println("Server starting on :8080")
    log.Fatal(http.ListenAndServe(":8080", nil))
}

或者使用XMLHttpRequest的替代方案:

// 在HTML的JavaScript部分可以使用XMLHttpRequest
fmt.Fprintf(w, `<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Insert Number</title>
</head>
<body>
    <script>
        var x = 5;
        
        function insertNumber() {
            var xhr = new XMLHttpRequest();
            xhr.open('POST', '/insert', true);
            xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
            
            xhr.onreadystatechange = function() {
                if (xhr.readyState === 4) {
                    if (xhr.status === 200) {
                        console.log('Success:', xhr.responseText);
                        alert('Inserted: ' + xhr.responseText);
                    } else {
                        console.error('Error:', xhr.statusText);
                        alert('Error inserting number');
                    }
                }
            };
            
            xhr.send('number=' + x);
        }
        
        // 调用插入函数
        insertNumber();
    </script>
</body>
</html>`)

关键点:

  1. 创建单独的/insert端点处理数据插入
  2. 使用JavaScript的fetch或XMLHttpRequest将客户端数据发送到服务器
  3. 在Go端使用r.FormValue("number")获取发送的数据
  4. 使用预处理语句防止SQL注入

这样就能正确地将JavaScript变量x的值插入到MySQL数据库中了。

回到顶部