无法使插入 SQL 数据库表工作


Can't make INSERT INTO sql database table work

<?php
    session_start();
    $con=mysqli_connect("localhost","root","","accting");
    $query = "USE accting";
    $result = mysqli_query($con,$query);
    $query = "INSERT INTO document (docDate, supplierName, refNo, vatReg, vpGoods, viGoods, nvPurchases, totalAmt, book, cash, account, termsMonth, termsDay) VALUES ('{$_POST['invoiceDate']}', '{$_POST['supplierName']}', '{$_POST['refNo']}', '{$_POST['vatReg']}', '{$_POST['amtVat']}', '{$_POST['vatInput']}', '{$_POST['nonVat']}', '{$_POST['total']}', '{$_POST['bookType']}', '{$_POST['cash']}', '{$_POST['account']}', '{$_POST['termsMonths']}', '{$_POST['termsDays']}',)";
    $result = mysqli_query($con, $query);
    echo "Add document successful.";
?>

无论是否使用 $query = "USE accting"; 命令,尽管打印的页面"添加文档成功",但条目仍不会添加到数据库中。这是怎么回事?

问题很可能是VALUES部分中的尾随逗号。

您还应该考虑另一种传入变量的方法,因为那里存在 SQL 注入漏洞。 下面是一个示例:

$stmt = mysqli_prepare($link, "INSERT INTO table VALUES (?, ?)");
mysqli_stmt_bind_param($stmt, "ii", $_POST['x'], $_POST['y']);
mysqli_stmt_execute($stmt);

这里有很多问题。我怀疑它失败了,因为您的 VALUES 大括号内有一个尾随逗号。但是,对我来说最令人担忧的是,看起来您正在将用户输入直接从 POST 数组直接泵入数据库,这使得此代码容易受到 SQL 注入的影响。

有关此内容的更多信息,请参阅mysqli_real_escape_string()

此外,mysqli_query()失败时返回 false,所以我会检查这一点,如果发生这种情况,请致电mysqli_error()找出出了什么问题。只有当mysqli_query不返回 false 时,您才应该宣布文档已成功添加!

您需要转储 $_POST 数组以查看是否确实发送了任何数据。

session_start();
var_dump($_POST);

然后在每次 SQL 调用后回显您的 sql

echo $query;

最后,您确实应该在插入数据库之前验证输入($_POST数组),如前所述,因为SQL注入风险。