2017-05-05 85 views
4

我有x,y和z是數組。數據顯示正常,但我無法將其插入到我的數據庫中。它將適當數量的行插入爲全0,而不是用戶輸入的整型值。這裏是PHP。使用PHP將數組插入數據庫

$x = $_POST['x']; 
$y = $_POST['y']; 
$z = $_POST['z']; 


foreach($x as $result){ 
    $query = 'INSERT INTO table 
      (x, y, z) 
       VALUES (:x, :y, :z)'; 
    $statement = $db->prepare($query); 
    $statement->bindValue(':x', $x); 
    $statement->bindValue(':y', $y); 
    $statement->bindValue(':z', $z); 
    $statement->execute(); 
    $statement->closeCursor(); 
} 

我得到這個錯誤:請注意:數組字符串轉換在

這是所有3條bindValue線

我知道的foreach是錯誤的,但說的是,我已經得到了唯一的循環與...接近。給我適量的行,但只向數據庫中插入0。

+0

這是錯誤的,因爲您正在迭代$ x到$ results,所以$ results是現在您需要保存的值。但這裏的問題是爲什麼要做$ x的foreach?是一個數組的檢索值? – hungrykoala

+1

你對變量'$ x','$ y','$ z'沒有做任何事情,所以如果它們是數組,它們顯然仍然是你的查詢中的數組。 –

回答

2

你必須插入帶有Y,Z在同指數一樣x值,

foreach($x as $key=>$xval){ 
    $query = 'INSERT INTO table 
      (x, y, z) 
       VALUES (:x, :y, :z)'; 
    $statement = $db->prepare($query); 
    $statement->bindValue(':x', $xval); 
    // check if y value exist on same key 
    $statement->bindValue(':y', isset($y[$key]) ? $y[$key] : ''); 
    // check if z value exist on same key 
    $statement->bindValue(':z', isset($z[$key]) ? $z[$key] : ''); 
    $statement->execute(); 
    $statement->closeCursor(); 
} 

Bulk Insert Prepared Statements你可以嘗試批量插入類似,

try { 
    $sql="INSERT INTO table (x, y, z) VALUES "; 
     $insertQuery = array(); 
     $insertData  = array(); 
     foreach ($x as $key=>$xval) { 
      $insertQuery[] = '(?,?,?)'; 
      $insertData[] = $xval; 
      $insertData[] = isset($y[$key])?$y[$key]:''; 
      $insertData[] = isset($z[$key])?$z[$key]:''; 
     } 

     if (!empty($insertQuery)) { 
      $sql .= implode(', ', $insertQuery); 
      $stmt = $this->db->prepare($sql); 
      $stmt->execute($insertData); 
      $stmt->closeCursor(); 
     } 
} catch (PDOException $e) { 
     error_log('Error reading the session data table in the session reading method.'); 
     error_log(' Query with error: '.$sql); 
     error_log(' Reason given:'.$e->getMessage()."\n"); 
     return false; 
} 
+1

這可能永遠不會發生,但如果'$ y'或'$ z'包含的元素比'$ x'多?我想這是OP的問題,數組之間的關係是什麼。 –

+0

我認爲情況並非如此,因爲在問題OP使用'$ x'的循環而不是其他的(y或z)。所以假設可能會有'$ y'特別是'$ z'。 –

+0

明白了。非常感謝 – govCode

0

下面是我的邏輯簡單而直了解該類型的問題:

$sizex = count($x); 
$sizey = count($y); 
$sizez = count($z); 

$maxsize = max($sizex,$sizey,$sizez); 
for ($i = 0; $i < $maxsize; $i++) { 
    $query = 'INSERT INTO table 
      (x, y, z) 
       VALUES (:x, :y, :z)'; 
    $statement = $db->prepare($query); 
    $statement->bindValue(':x', isset($x[$i])?$x[$i]:'')); 
    // check if y value exist on same key 
    $statement->bindValue(':y', isset($y[$i])?$y[$i]:''); 
    // check if z value exist on same key 
    $statement->bindValue(':z', isset($z[$i])?$z[$i]:''); 
    $statement->execute(); 
    $statement->closeCursor(); 
}