2 回答

TA貢獻1802條經驗 獲得超6個贊
當然,可以從客戶端 js 將數(shù)據(jù)插入數(shù)據(jù)庫,但不要!我想不出一種方法可以做到這一點,不會暴露您的數(shù)據(jù)庫憑據(jù),讓您容易受到惡意行為者的攻擊。
您需要做的是在服務器上設置一個 php 腳本,然后使用 xhr 請求將您想要插入的數(shù)據(jù)(通過 POST 或 GET)發(fā)送到該腳本,并讓該 php 腳本執(zhí)行插入操作。然而,要確保這一點還需要做很多工作。谷歌“如何清理 php 中的 mysql 輸入”并閱讀了幾篇相關文章。
根據(jù)您需要執(zhí)行的操作,您可以自己清理輸入,但推薦的方法是使用準備好的語句,您需要閱讀特定實現(xiàn)的文檔,無論是 mySQL 中的 mysqli 還是 pdo 還是其他一些庫(假設您使用的是 SQL、postGRE、Oracle 等)。
華泰
=================================================
以下是如何在 js 中執(zhí)行此操作,但不要這樣做,除非您永遠不會在本地計算機之外公開此代碼。
var connection = new ActiveXObject("ADODB.Connection");
var connectionstring = "Provider=host;Data Source=table;User Id=user;Password=pass;";
connection.Open(connectionstring);
var rs = new ActiveXObject("ADODB.Recordset");
var sql = {{your sql statement}};
rs.Open(sql, connection);
connection.close;
==============================================
對于 php,執(zhí)行類似的操作,將主機、用戶、通行證、數(shù)據(jù)庫替換為您的實際憑據(jù)以及主機名和數(shù)據(jù)庫:
$db = new mysqli({host}, {user}, {pass}, {database});
if($db->connect_errno > 0){ die ("Unable to connect to database [{$db->connect_error}]"); }
設置連接。如果這是一個可公開訪問的 php 服務器,則存在有關如何設置連接的規(guī)則,以便您不會意外暴露您的憑據(jù),但我現(xiàn)在將跳過它。您基本上可以將其保存到一個無法從外部訪問的文件中(例如,在文檔根目錄之上),然后將其包含在內,但數(shù)據(jù)庫安全性是一個復雜的主題。
要獲取在 ajax 調用的查詢字符串中傳遞的值:
$val1 = $_GET['val1'];
$val2 = $_GET['val2'];
然后使用參數(shù)化查詢進行插入:
$query = $db->prepare("
INSERT INTO your_table (field1, field2)
VALUES (?, ?)
");
$query->bind_param('ss', $val1, $val2);
$query->execute();
現(xiàn)在,您必須查看文檔。“ss”意味著它將把您插入的這兩個值視為字符串。我不知道設置的表,因此您必須為實際插入的內容查找正確的代碼,例如如果它們是整數(shù),則“ii”或“si”意味著第一個值是字符串,第二個是整數(shù)。
以下是允許的值:
i - 整數(shù) d - 雙精度數(shù) s - 字符串 b - BLOB
但無論如何請查看準備好的語句的文檔。我在這個例子中使用了 msqli。

TA貢獻1798條經驗 獲得超7個贊
您可能想檢查 Ajax 請求。
您要做的基本上是創(chuàng)建從 javascript 到服務器上的 php 文件的異步請求。
Ajax 允許通過與后臺服務器交換少量數(shù)據(jù)來異步更新網(wǎng)頁。這意味著可以更新網(wǎng)頁的部分內容,而無需重新加載整個頁面。
添加回答
舉報