2014-11-04 90 views
1

我一直无法让我的INSERT语句正常工作。我知道问题是我想如何绑定参数。在添加参数绑定之前,INSERT正在工作。PHP插入值数组

$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($语句):

对象(PDOStatement对象)[2] 公共 '的queryString'=>字符串“INSERT INTO库存(仓库,产品,描述QtyOnHand,QtyUnavail ,BinLoc1,BinLoc2,GLCost,OnhandTotalValue,UnavailTotalValue,GrandTotalValue) VALUES(?,?,?,?,?,?,?,?,?,?,?);' (长度= 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); 
} 

感谢大家,帮助!

+0

您正尝试将多个值插入到一列中。 – 2014-11-04 14:58:48

+0

我编辑帖子以显示$ sqlField变量的值,这是一个包含表的所有列名称的字符串。 – 2014-11-04 15:25:38

+2

@BrentConnor我需要知道所有'$ sqlV'是如何被填充的。与此同时,尝试一个'array'方法'$ stmt-> execute(array($ sqlV [0],$ sqlV [1])等);' – 2014-11-04 15:58:31

回答

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. 
} 

附:您可以删除查询字符串中的分号。到最后应该不会伤害任何东西,但是如果你在它后面添加任何东西,它会尽早终止你的声明。

2

这段代码:

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

删除引号

(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) 
+1

我删除了引号,但它仍然没有做到数据库。如果在执行后在$ stmt上使用print_r,它会输出:[PDOStatement Object([queryString] => INSERT INTO inventory(Whse,Product,Description,QtyOnHand,QtyUnavail,BinLoc1,BinLoc2,GLCost,OnhandTotalValue,UnavailTotalValue,GrandTotalValue)VALUES ?,?,?,?,?,?,?,?,?,?,?);)] – 2014-11-04 14:44:26

+1

@BrentConnor你得到了什么错误?另外你可以var_dump你的查询? – 2014-11-04 14:45:48

+1

没有错误。的var_dump结果:对象(PDOStatement对象)[2] 公共 '的queryString'=>字符串“INSERT INTO库存(仓库,产品,描述QtyOnHand,QtyUnavail,BinLoc1,BinLoc2,GLCost,OnhandTotalValue,UnavailTotalValue,GrandTotalValue) \t \t \t \t值(,,,,,,,,,,,,,,,,,,));'' (长度= 192) – 2014-11-04 14:48:23