【发布时间】:2021-10-22 20:15:03
【问题描述】:
我编写了一些代码,使用 JQuery 和 PHP 将数据输入到我的 sql 数据库中,并且可以正常工作。 但是我需要Ajax请求的错误块在数据库服务器离线、sql抛出错误或者应该有错误的时候执行。
问题是,ajax 请求的错误块永远不会被执行。永远只是成功的障碍。不管是sql查询错误还是数据库服务器离线。
我已经尝试过使用失败块和 jQuery.$.get() 但这也不起作用。但我还是更喜欢 ajax 请求。
到目前为止,我已经编写了以下代码:
//JavaScript-function to insert data into a database. The parameter is an SQL-INSERT statement.
function insertIntoDatabase(sqlQuery)
{
var result;
$.ajax({
type: "POST",
url: "../../general/clientHelper.php",
data: {sql: sqlQuery},
async: false,
error: function()
{
if(sqlQuery.split(" ")[0] != "INSERT") console.log("SQL-Query is not an INSERT statement");
result = false;
},
success: function()
{
result = true;
}
});
return result;
}
<?php
//clientHelper.php - Insert data into the database.
if(isset($_POST['sql'])) insertIntoDatabase($_POST['sql']);
function insertIntoDatabase($sqlQuery)
{
$ip = "10.10.10.1";
$port = 3306;
$username = "candidate";
$password = "candidate";
$dbname = "cqtsdb";
$connection = new mysqli($ip, $username, $password, $dbname, $port);
$connection->query($sqlQuery);
$connection->close();
exit();
}
?>
我现在不知道该怎么办:/请帮助
【问题讨论】:
-
在发出 AJAX 请求之前为什么不检查
sqlQuery的值? -
error:回调仅在 HTTP 错误而非 PHP 错误时执行。 -
最好只将数据发送到后端,并在后端创建sql查询,您的实际代码很容易受到攻击,任何用户都可以向后端发送任何sql查询,想象一下@ 987654327@ 然后
DELETE FROM some_table,... -
永远不要在服务器端接受 SQL 查询。我的意思是——你为什么要这样做?所以@yassinefikri 说了什么。另外,请使用准备好的语句(参见php.net/manual/de/mysqli.quickstart.prepared-statements.php)和检查错误(参见php.net/manual/de/mysqli.error.php)。