PHP插入值数组

时间:2014-11-04 14:32:33

标签: php sql-server pdo

我无法使INSERT语句生效。我知道问题是我是如何绑定参数的。在添加参数绑定之前,INSERT正在工作。

$inventoryQuery = "INSERT INTO inventory (Whse, Product, Description,
QtyOnHand, QtyUnavail, BinLoc1, BinLoc2, GLCost, OnhandTotalValue,
UnavailTotalValue, GrandTotalValue) 
    VALUES ('?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?');";
// execute INSERT statement
$conn = $GLOBALS['conn'];
$stmt = $conn->prepare($inventoryQuery);
$stmt->bindParam(1, $sqlV[0]);
$stmt->bindParam(2, $sqlV[1]);
$stmt->bindParam(3, $sqlV[2]);
$stmt->bindParam(4, $sqlV[3]);
$stmt->bindParam(5, $sqlV[4]);
$stmt->bindParam(6, $sqlV[5]);
$stmt->bindParam(7, $sqlV[6]);
$stmt->bindParam(8, $sqlV[7]);
$stmt->bindParam(9, $sqlV[8]);
$stmt->bindParam(10, $sqlV[9]);
$stmt->bindParam(11, $sqlV[10]);

$stmt->execute();

使用var_dump($ stmt)输出:

  

对象(PDOStatement对象)[2]     public'queryString'=> string'INSERT INTO inventory(Whse,Product,Description,QtyOnHand,QtyUnavail,BinLoc1,BinLoc2,GLCost,OnhandTotalValue,UnavailTotalValue,GrandTotalValue)                       价值观(?,?,?,?,?,?,?,?,?,?,?);' (长度= 192)

我已经看过并尝试了很多方法来处理绑定参数。现在我的头在游泳。如果你能提供解决方案和解释,我会很高兴。

所提供的所有信息的解决方案:

    try{
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $inventoryQuery = "INSERT INTO inventory ($sqlField) 
        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
    // execute INSERT statement
    $conn = $GLOBALS['conn'];
    $stmt = $conn->prepare($inventoryQuery);
    $stmt->bindValue(1, $sqlV[0]);
    $stmt->bindValue(2, $sqlV[1]);
    $stmt->bindValue(3, $sqlV[2]);
    $stmt->bindValue(4, ((int) ((float) $sqlV[3])));
    $stmt->bindValue(5, ((int) ((float) $sqlV[4])));
    $stmt->bindValue(6, $sqlV[5]);
    $stmt->bindValue(7, $sqlV[6]);
    $stmt->bindValue(8, ((float) $sqlV[7]));
    $stmt->bindValue(9, ((float) $sqlV[8]));
    $stmt->bindValue(10, ((float) $sqlV[9]));
    $stmt->bindValue(11, ((float) $sqlV[10]));

    $stmt->execute();
}
catch(PDOException $ex){
    var_dump($ex);
}

感谢所有帮助过的人!

2 个答案:

答案 0 :(得分:2)

这段代码:

('?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?')

删除引号

(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

答案 1 :(得分:2)

我将使用不正确的列类型。尝试在try-catch块中执行您的执行,并确保SQL不会抛出任何错误。如果是,它可能会向您显示您需要做什么。

以下是一个例子:

try
{
    $stmt->execute();
}
catch (PDOException $ex)
{
    // log this object or just the error messages
    log($ex->getMessage()); // Assuming you have some sort of global logger set up.
}

P.S。您可以在查询字符串中删除分号。在最后不应该伤害任何东西,但如果你在它之后添加任何东西,它将提前终止你的陈述。