无法使INSERT INTO sql数据库表工作

时间:2013-10-25 00:28:11

标签: php sql

<?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";命令,尽管页面打印添加文档成功,但条目仍未添加到数据库中。这有什么不对?

3 个答案:

答案 0 :(得分:2)

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

您还应该考虑另一种传递变量的方法,因为那里存在SQL Injection漏洞。这是一个例子:

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

答案 1 :(得分:1)

这里有很多错误。我怀疑它失败了,因为你的VALUES括号内有一个尾随逗号。但是,对我来说最令人担忧的是,看起来你直接将POST数组中的用户输入直接输入到数据库中,这使得这段代码容易受到SQL注入的攻击。<​​/ p>

有关详细信息,请参阅mysqli_real_escape_string()

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

答案 2 :(得分:0)

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

session_start();
var_dump($_POST);

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

echo $query;

最后,你真的应该在插入db之前验证输入($ _POST数组),正如已经说明的那样,因为sql注入风险。