2017-02-01 1 views
1

테이블 레코드를 채울 배열이 있습니다. 불행히도 배열의 첫 번째 레코드 만 채울 것입니다. 내 증분이 잘못 선언 될 것으로 예상되지만 작동 할 조합을 찾을 수 없습니다. 또한 '$ mtcelogID = $ siteNAME.' '. $ Maindate.'. '$ i;' ID의 마지막 부분을 증가 시키려면배열의 값 하나만 채우는 테이블

$mtcelogARRAY = $objPHPExcel->setActiveSheetIndex(2)->rangeToArray('A8:A18'); 
$num_mtcelog = count($mtcelogARRAY); // Here get total count of row in that Excel sheet 
for($i=0; $i<=$num_mtcelog; $i++){ 
$sql_mtcelog = "INSERT INTO `maintenance_log`(`mtcelogID`,`mtcelogTYPE`,`MaintenanceID`) VALUES (?,?,?)"; 
$qury_mtcelogARRAY = mysqli_prepare($link, $sql_mtcelog); 
$mtcelogID = $siteNAME.'.'.$Maindate.'.'.$i;      
    mysqli_stmt_bind_param($qury_mtcelogARRAY,"sss", $mtcelogID, $mtcelogARRAY[$i][0], $MaintenanceID); 
    mysqli_stmt_execute($qury_mtcelogARRAY); 
    mysqli_stmt_close($qury_mtcelogARRAY); 
      } 

위의 코드는 내 PHP 테이블에 이것을 반환합니다. enter image description here 그리고 내 배열은 사전

답변

0

난 당신이 mysqli를 사용하고 알이

enter image description here

감사처럼 보이지만 여기이 PDO의 대답을 떠날거야. 이 코드가 작은 유지 보수 스크립트라면, mysqli를 버려야하는 데 문제가 없어야합니다. 바인딩이 필요 없다는 것을 알면 배열의 값을 PDOStatement::execute()에 전달하면됩니다. 많은 si에 대해 걱정할 필요가 없습니다. 또한 foreachfor보다 훨씬 유연하고 덜 자세한 구문입니다.

$pdo = new PDO("mysql:host=localhost;dbname=mydatabase", $username, $password); 

$mtcelogARRAY = $objPHPExcel->setActiveSheetIndex(2)->rangeToArray('A8:A18'); 

$sql_mtcelog = "INSERT INTO `maintenance_log`(`mtcelogID`,`mtcelogTYPE`,`MaintenanceID`) VALUES (?,?,?)"; 

$stmt = $pdo->prepare($sql_mtcelog); 

foreach ($mtcelogARRAY as $i=>$arr) { 
    $params = ["$siteNAME.$Maindate.$i", $arr[0], $MaintenanceID]; 
    $stmt->execute($params); 
} 

중요한 것은 루프 밖에서 진술을 준비하는 것입니다. 준비된 명령문의 주요 목표 중 하나는 오버 헤드를 줄이는 것입니다. 반복적으로 명령문을 준비하면 오버 헤드가 증가합니다.

+0

준비 팁 주셔서 감사합니다. 나는이 코드를 시도했지만 배열의 한 행만 채울 때와 동일한 결과를 얻는다. "$ siteNAME. $ Maindate. $ i"를 "$ siteNAME. $ Maindate. $ id"로 변경했음을 참고하십시오. $ id = uniqid(). 내가 준비 중에 아마도 빠진 다른 것이 있을까요? – brettg

+0

나는 귀하의 데이터가 예상대로인지 확인할 것입니다. 또한 데이터베이스의 고유 키에 문제가 없는지 확인하십시오. 몇 가지 오류 검사를 추가하여 준비와 실행이 성공적인지 확인해 볼 수 있습니다. – miken32

+1

와우 나는 밀도가 있습니다. 유지 관리 ID는 색인 대신 고유로 색인되었습니다. 타이! 위대한 작품! – brettg

관련 문제