php sqlsrv插入失败

时间:2015-12-17 17:58:13

标签: php html sql-server microsoft-dynamics

我试图通过Web界面将行插入Microsoft Dynamics RMS数据库。我可以从Store Operations Manager(命令行?)运行插入并且它运行良好,但是当我尝试使用sqlsrv从我的PHP脚本运行它时,它会转储一个515错误,说它无法在ID列中插入空值

我觉得错误是sqlsrv与数据库而不是数据库本身交谈的原因,因为我可以直接运行同一行并创建新行。

我在前几次用params尝试了这个,但为了解决问题而把它拿出来了。我用这两种方法都得到了同样的错误。

错误消息:

  

([0] =&gt;数组([0] =&gt; 23000 [SQLSTATE] =&gt; 23000 [1] =&gt; 515 [code] =&gt; 515 [2] =&gt; [Microsoft] [ SQL Server Native Client 11.0] [SQL Server]无法将值NULL插入列&#39; ID&#39;,表&#39; OMGHQ.dbo.Customer&#39 ;;列不允许空值.INSERT失败。[ message] =&gt; [Microsoft] [SQL Server Native Client 11.0] [SQL Server]无法将值NULL插入列&#39; ID&#39;,table&#39; OMGHQ.dbo.Customer&#39 ;;列不允许空值.INSERT失败。)[1] =&gt;数组([0] =&gt; 01000 [SQLSTATE] =&gt; 01000 [1] =&gt; 3621 [code] =&gt; 3621 [2] =&gt; ; [Microsoft] [SQL Server Native Client 11.0] [SQL Server]语句已终止。[message] =&gt; [Microsoft] [SQL Server Native Client 11.0] [SQL Server]语句已终止。))< / p>

    $conn = sqlConnection();

if( $conn === false ) {
    die( print_r( sqlsrv_errors(), true));
}

$itlquery = "DECLARE @itemID INT
            DECLARE @newQuantity INT
            SET @itemID = $itemID
            SET @newQuantity = $newQuantity
            INSERT INTO inventorytransferlog (itemID, quantity, cashierID, type, cost) VALUES (@itemID, @newQuantity - (SELECT TOP 1 quantity FROM item WHERE id = @itemID), 6, 5, (SELECT TOP 1 cost FROM item WHERE id = @itemID));";

echo $itlquery;

$itlstatement = sqlsrv_query($conn,$itlquery);

if($itlstatement === false)
{
    die(print_r(sqlsrv_errors(),true));
}

1 个答案:

答案 0 :(得分:0)

不知道你的php变量是什么($ itemID和$ newQuantity),使用如下参数更安全。这是一个准备好的语句,并且具有防止一些SQL注入的额外好处。

var prop = "param01";
var val = "value01";
var obj = {};
obj[prop] = val;

修改 虽然以上是正确的,但它不是你问题的答案。您的$itlquery = "INSERT INTO inventorytransferlog (itemID, quantity, cashierID, type, cost) VALUES (?, ? - (SELECT TOP 1 quantity FROM item WHERE id = ?), 6, 5, (SELECT TOP 1 cost FROM item WHERE id = ?));"; echo $itlquery; $itlstatement = sqlsrv_query($conn,$itlquery,array($itemId,$newQuantity,$itemId,$itemId)); 表格上必须有一个ID列,该列不可为空。也许它是主键而不是自动增量。因此,您必须在插入中指定它,或更改架构以使其可为空或自动递增(如果它不是主键)