2014-11-04 91 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