PHP无法向数据库SQL SERVER 2008插入数据

4

我有一个表单,想要用它来收集数据并插入到数据库中:

<form actoin="request-new-price.php" method="post" id="demo-form2" data-parsley-validate>
<div>
    <label for="salesRep">Sales Rep:</label>
    <div>
        <input type="text" name="salesRep" id="salesRep" required="required" value="<?php echo $user['userName']; ?>">
    </div>
</div>
<div>
    <label for="CardName">Customer Name</label>
    <div>
        <input type="text" id="CardName" name="CardName" required="required" value="<?php echo $selectedCustomerName ?>">
    </div>
</div>
<div>
    <label for="CardCode">Customer Code</label>
    <div>
        <input type="text" id="CardCode" name="CardCode" required="required" value="<?php echo $selectedCustomerID ?>">
    </div>
</div>
<div>
    <label for="ItemName">Product Name</label>
    <div>
        <input type="text" id="ItemName" name="ItemName" required="required" value="<?php echo $selectedProductName ?>">
    </div>
</div>
<div>
    <label for="ItemCode">Product Code</label>
    <div>
        <input type="text" id="ItemCode" name="ItemCode" required="required" value="<?php echo $selectedProductCode ?>">
    </div>
</div>
<div>
    <label for="Price">Current Price</label>
    <div>
        <input type="text" id="Price" name="Price" required="required" value="£<?php echo $selectedProductPrice ?>">
    </div>
</div>
<div>
    <label for="requestedPrice">Requested Price</label>
    <div>
        <input type="text" id="requestedPrice" name="requestedPrice" required="required" value="£">
    </div>
</div>
<div>
    <div>
        <a href="specialprice.php?custCode=<?php echo $customer['CardCode'];?>&custName=<?php echo $customer['CardName'];?>">Cancel</a>
        <button type="submit" id="submit" name="submit" value="1">Submit</button>
    </div>
</div>
</form>

以下是我编写的SQL/PHP代码:

<?php 

if(isset($_POST['submit'])){
    print_r($_POST);

    $query = prepare("INSERT INTO PriceRequests (salesRep, CardName, CardCode, ItemName, ItemCode, Price, requestedPrice) 
                VALUES (:salesRep, :cardName, :cardCode, :itemName, itemCode, :itemPrice, :newPrice)
            ");
            $insertSql = sqlsrv_query($sapconn, $query);

    $insertSql->bindParam(":salesRep",$salesRep);
    $insertSql->bindParam(":cardName",$cardName);
    $insertSql->bindParam(":cardCode",$cardCode);
    $insertSql->bindParam(":itemName",$itemName);
    $insertSql->bindParam(":itemCode",$itemCode);
    $insertSql->bindParam(":itemPrice",$itemPrice);
    $insertSql->bindParam(":newPrice",$newPrice);

    $salesRep = trim($_POST['salesRep']);
    $cardName = trim($_POST['CardName']);
    $cardCode = trim($_POST['CardCode']);
    $itemName = trim($_POST['ItemName']);
    $itemCode = trim($_POST['ItemCode']);
    $itemPrice = trim($_POST['Price']);
    $newPrice = trim($_POST['requestedPrice']);


    $insertSql->execute();   
    return $insertSql;
}

?>

但是数据没有插入到数据库中,我对PHP相当新手,这是我第一次尝试向数据库写入数据,所以我可能会错过一些简单的东西,或者完全错了。

无论如何,所有帮助都应该受到赞赏。

编辑:

我的PHP现在变成了这样:

if(isset($_POST['submit'])){
   //print_r($_POST);

    $query = "INSERT INTO PriceRequests (salesRep, CardName, CardCode, ItemName, ItemCode, Price, requestedPrice) 
                                        VALUES (:salesRep, :cardName, :cardCode, :itemName, :itemCode, :itemPrice, :newPrice)
                    ";
    $stmt = $sapconn->prepare($query);

    $salesRep = (isset($_POST['salesRep']) && !empty($_POST['salesRep']))?$_POST['salesRep'] : NULL;
    $cardName = (isset($_POST['CardName']) && !empty($_POST['CardName']))?$_POST['CardName'] : NULL;
    $cardCode = (isset($_POST['CardCode']) && !empty($_POST['CardCode']))?$_POST['CardCode'] : NULL;
    $itemName = (isset($_POST['ItemName']) && !empty($_POST['ItemName']))?$_POST['ItemName'] : NULL;
    $itemCode = (isset($_POST['ItemCode']) && !empty($_POST['ItemCode']))?$_POST['ItemCode'] : NULL;
    $itemPrice = (isset($_POST['Price']) && !empty($_POST['Price']))?$_POST['Price'] : NULL;
    $newPrice = (isset($_POST['requestedPrice']) && !empty($_POST['requestedPrice']))?$_POST['requestedPrice'] : NULL;

    $stmt->bindValue(':salesRep', $salesRep, PDO::PARAM_STR);
    $stmt->bindValue(':cardName', $cardName, PDO::PARAM_STR);
    $stmt->bindValue(':cardCode', $cardCode, PDO::PARAM_STR);
    $stmt->bindValue(':itemName', $itemName, PDO::PARAM_STR);
    $stmt->bindValue(':itemCode', $itemCode, PDO::PARAM_STR);
    $stmt->bindValue(':itemPrice', $itemPrice, PDO::PARAM_STR);
    $stmt->bindValue(':newPrice', $newPrice, PDO::PARAM_STR);

    $stmt->execute();   
    return $stmt;
    }

但是我仍然无法将输入内容存入我的数据库,而且我收到了以下错误提示信息: PHP 致命错误:未捕获的错误:在资源上调用成员函数 prepare()

数据库连接:

<?php 
$serverName = "serverName";
$connectionInfo = array( "Database"=>"database_name", "UID"=>"user_Id", "PWD"=>"Password", "ReturnDatesAsStrings"=>true);
$sapconn = sqlsrv_connect( $serverName, $connectionInfo);
?>

2
你正在混用 sqlsrv_PDO:: - Phiter
我可以问一下你建议使用哪个吗? - PHPNewbie
2个回答

1

你知道第一行有一个错别字吗?带有错误的内容无法提交。

 <form actoin="request-new-price.php" method="post" id="demo-form2" data-       parsley-validate>

将起始标签改为表单动作。

谢谢,我没有注意到!但是我的表单仍然无法提交。 - PHPNewbie

1

PHP代码中又出现了一个拼写错误:

$query = prepare("INSERT INTO PriceRequests (salesRep, CardName, CardCode, ItemName, ItemCode, Price, requestedPrice) 
                VALUES (:salesRep, :cardName, :cardCode, :itemName, itemCode, :itemPrice, :newPrice)
            ");

占位符itemCode没有后缀":"。请检查并尝试。 谢谢。

更新:

我尝试了你在问题中写的一些东西。你已经在参数分配之前尝试绑定参数到占位符。

当我尝试这样做时,我得到了异常。我认为这可能是数据没有被插入的原因。

我建议您按以下方式编写代码:

PHP 代码:

<?php 

if(isset($_POST['submit'])){
    print_r($_POST); //Unnecessary, you can remove it

    $query = prepare("INSERT INTO PriceRequests (salesRep, CardName, CardCode, ItemName, ItemCode, Price, requestedPrice) 
                VALUES (:salesRep, :cardName, :cardCode, :itemName, :itemCode, :itemPrice, :newPrice)
            ");
            $insertSql = sqlsrv_query($sapconn, $query);

    $salesRep = trim($_POST['salesRep']);
    $cardName = trim($_POST['CardName']);
    $cardCode = trim($_POST['CardCode']);
    $itemName = trim($_POST['ItemName']);
    $itemCode = trim($_POST['ItemCode']);
    $itemPrice = trim($_POST['Price']);
    $newPrice = trim($_POST['requestedPrice']);


    $insertSql->bindParam(":salesRep",$salesRep);
    $insertSql->bindParam(":cardName",$cardName);
    $insertSql->bindParam(":cardCode",$cardCode);
    $insertSql->bindParam(":itemName",$itemName);
    $insertSql->bindParam(":itemCode",$itemCode);
    $insertSql->bindParam(":itemPrice",$itemPrice);
    $insertSql->bindParam(":newPrice",$newPrice);

    $insertSql->execute();   
    return $insertSql;
}

?>

我建议做一些更改:
1. 由于这里使用了PDO,请使用一个变量来获取数据库连接(假设它是$db_conn)。
而不是 $insertSql = sqlsrv_query($sapconn, $query);
使用 $db_conn = new PDO(, , ); $stmt = $db_conn->prepare($query)
然后通过以下方式绑定值: $stmt->bindValue(, , );
例如:$stmt->bindValue(:itemName, $itemName, PDO::PARAM_STR);
然后执行: $stmt->execute();
2. 如果对数据进行一些验证将会很有帮助:
通过验证将POST的值分配给变量
例如:

$itemName = (isset($_POST['ItemName']) && !empty($_POST['ItemName']))?$_POST['ItemName'] : NULL;

在这里,如果插入查询执行时使用了“NULL”,它将抛出异常。

N.B.:应该使用try-catch块。

我认为现在它应该能够工作。

如果不起作用,请随时告诉我,我会再次检查。


感谢您的反馈,我已经注意到并更新了,但仍未生效。 - PHPNewbie
我已经检查并更新了我的答案。请您检查一下,如果有任何疑问,请在评论中提出。谢谢。 - Subhra Jyoti Lahiri
尝试使用 $sapconn = new PDO("sqlsrv:Server=YouAddress;Database=YourDatabase", "Username", "Password"); 连接数据库,而不是 sqlsrv_connect()。请告诉我们是否有效。 - Subhra Jyoti Lahiri
仍然无法工作,我得到一个空屏幕和以下错误: PHP致命错误:返回无效句柄 - PHPNewbie
让我们在聊天中继续这个讨论 - Subhra Jyoti Lahiri
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接