2016-06-20 3 views
0

Opencart v2.2.0을 사용하고 있으며 PHP 스크립트에 문제가 있습니다. 제발 내가 할내 PHP 스크립트의 치명적인 오류

function restoreBackup() 
{ 
    global $mysqli; 

    $i    = 0; 
    $getpic   = "SELECT * FROM oc_product_backup LIMIT 0, 100000"; 
    $backup   = $mysqli->query($getpic); 

    $mysqli->autocommit(FALSE); 
    $updateproduct_sql  = "UPDATE oc_product SET image = ?, ean = ?, model = ?, status = ?, price_sync = ?, modified_by = ?, date_modified = ? WHERE product_id= ?"; 
    $updatedescription_sql = "UPDATE oc_product_description SET name = ?, description = ?, meta_description = ?, meta_keyword = ?, tag = ?, modified_by = ? WHERE product_id = ? AND language_id = ?"; 

    $stmt = $mysqli->prepare($updateproduct_sql); 
    $stmt->bind_param('sssiiiss', $image, $ean, $model, $status, $price_sync, $modified_by, $date_modified, $product_id); 

    $stmt2 = $mysqli->prepare($updatedescription_sql); 
    $stmt2->bind_param('sssssisi', $name, $description, $meta_description, $meta_keyword, $tag, $modified_by, $product_id, $language_id); 

    while($row = $backup->fetch_array(MYSQLI_ASSOC)) 
    { 

     //$name    = removeslashes($row['name']); 
     $name    = $row['name']; 
     //$description  = removeslashes($row['description']); 
     $description  = $row['description']; 
     $meta_description = $row['meta_description']; 
     $meta_keyword  = $row['meta_keyword']; 
     $tag    = $row['tag']; 
     $product_id  = $row['product_id']; 
     $modified_by  = $row['modified_by']; 
     $language_id  = $row['language_id']; 
     if($row['language_id'] == 4) 
     { 
      $image   = $row['image']; 
      $ean   = $row['ean']; 
      $name   = $row['name']; 
      $model   = $row['model']; 
      $status   = $row['status']; 
      $price_sync  = $row['price_sync']; 
      $date_modified = $row['date_modified']; 
      if(!$stmt->execute()) 
       return false; 

     } 
     if(!$stmt2->execute()) 
      return false; 

     $i++; 
     if(($i % 500) === 0) $mysqli->commit(); 
    } 
    $mysqli->commit(); 
    $backup->close(); 
    return true; 
} 

function removeslashes($string) 
{ 
    $string=implode("",explode("\\",$string)); 
    return stripslashes(trim($string)); 
} 

오류가

Fatal error: Call to a member function bind_param() on boolean in

어떤 제안입니다 : 위의

 $stmt2->bind_param('sssssisi', $name, $description, $meta_description, $meta_keyword, $tag, $modified_by, $product_id, $language_id); 

전체 기능은 라인을 포함하여 다음과 같이이다 : 문제의 라인은? 나는 내가 뭘 잘못하고 있는지 보지 못합니다. 모두에게 미리 감사드립니다.

+0

오류 메시지를 붙이세요 !! – Saty

+0

@Saty 나는 그런 바보이다 - 미안하다, 나는 그것을하지 않는다. 오류 : 치명적인 오류 : – Nancy

+0

의 boolean 값에 bind_param() 멤버 함수를 호출하십시오. $ name = $ row [ 'name'];'this ''if ($ row ['language_id '] == 4)' – Saty

답변

2

prepare() 메소드는 false를 반환 할 수 있으므로 확인해야합니다. 왜 false를 반환하는지에 관해서는 SELECT, UPDATE 또는 WHERE 절의 테이블 이름이나 열 이름이 올바르지 않습니까?

또한 SQL 구문 분석에서 발생한 오류를 검사하려면 $ query-> error_list와 같은 것을 사용하는 것이 좋습니다. (가끔씩 실제 SQL 문 문자열을 에코하여 테스트 할 phpMyAdmin에 붙여 넣을 것입니다. 그러나 거기에는 분명히 실패한 것이 있습니다.)

+0

안녕하세요 @ Joël Bonet Rodríguez, 고맙습니다. 문제는 칼럼이 테이블에서 빠져 있다는 것입니다. 고맙습니다, 모두 도와주세요! – Nancy

+0

당신을 진심으로 환영합니다. 동일한 문제를 가진 다른 사람들이 쉽게 해결책을 찾을 수 있도록 upvote하십시오. 건배! – JoelBonetR