2011-12-14 6 views
0

클래스를 생성하고 일부 입력에서 테이블에 데이터를 삽입하려는 함수가 있습니다. 그것은 테이블을 확인하면 작동하지만 "prepare에서 인수의 개수는 bind_result의 arg와 일치하지 않습니다"라는 오류가 계속 발생합니다. 내 방법이 올바른지 또한 당신이 데이터를 삽입하고를 선택하지 않는 한 당신은 모든 bind_result 필요하지 않습니다 ..데이터를 MySql DB에 삽입하십시오.

private function insertData($foldName,$foldClass,$foldLink) { 

    $sql = "INSERT INTO folders (folder_name,folder_class,folder_link) VALUES ('$foldName','$foldClass','$foldLink')"; 

    if($stmt = $this->connect->prepare($sql)) { 
     $stmt->execute(); 
     $stmt->bind_result($foldName,$foldClass,$foldLink); 
     $stmt->close(); 
     $error = false; 
     $message['error'] = false; 
     $message['message'] = "Data Successfuly Inserted"; 
     return json_encode($message); 
    } 
     else { 
      $error = true; 
      $message['error'] = true; 
      $message['message'] = "Data Failed To Insert"; 
      return json_encode($message); 
     } 

} 
+0

INSERT 문은 결과 집합을 반환하지 않기 때문에 결합하는 것도 사실은 없다 : 당신은 전체 테이블을 비우하지 않으려면 auto_increment 1,하지만 당신은 대신을 alter 수 있습니다 말하다; 그냥'$ stmt-> bind_result ...'줄을 제거하십시오. – codeling

+0

제가'mysqli'에 관한 질문입니까? – deceze

+0

그것은 mysqli yes와 관련이 있으며, 방금 bind_result()를 삭제했습니다. 테스트 해보고 지금 무슨 일이 일어나는지 보도록하겠습니다. – Roland

답변

3

을 모른다.

하지만 준비된 진술의 핵심 기능을 사용해야합니다. 즉 : 안전하게 SQL 문자열로 그들의 "원시"값을 삽입하는 대신 문 객체에 변수를 전달합니다 : (. 내가 그것을 테스트하지 않았습니다)

$sql = "INSERT INTO folders (folder_name,folder_class,folder_link) VALUES (?,?,?)"; 
$stmt = $this->connect->prepare($sql); 
$stmt->bind_param("sss", $foldName, $foldClass, $foldLink); 
$stmt->execute(); 

+0

방금했는데 작동했습니다 :) 그리고 그렇습니다. (준비 중입니다 ...) 그래서 오류가 있는지 확인할 수 있습니다. 프로세스 ... 또한 인덱스가 5, 나는 그것을 자동 증가 int (11)로 설정하는 folder_id를 의미합니다. 어떻게 든 초기화 할 수 있습니까? – Roland

+0

@Roland 나는 그것이 효과적이기 때문에 기쁩니다. 내 예제에서 단순성 때문에'if' 문을 생략했습니다. 확실히, 당신은'if'-statement에 머물러 있어야합니다. 'auto_increment' 컬럼에 대해서 :'folder_id' 컬럼을 삭제하고 직접 다시 추가하거나 다음과 같은 MySQL 구문을 실행할 수 있습니다 : ALTER TABLE folders AUTO_INCREMENT = 1'. – Flinsch

+0

감사합니다. phpmyadmin에서 해냈습니다. XAMPP가있는 로컬 서버에서 작업하고 있습니다. 때로는 오버 헤드 80을보고 최적화하기 위해 클릭하지만, 왜 그게 보여 집니까? – Roland

0

truncate 쿼리를 사용 내가 것,

ALTER TABLE `table_name` auto_increment = 1 
+0

글쎄, 다차원 배열로 채우기 위해 준비하기 위해 비어 있습니다. 그리고 내가 그것을하기 전에 그것은 비어 있어야합니다. 나는 다차원 배열'array ('Name'=> 'Somename', 'Class'=> 'Someclass', 'Link'= 'Somelink'), array (다른 배열과 동일)); 그리고 나는 그것을 반복하고 두 번째 수준의 배열을 가져 와서 db에 저장하려고합니다. 위의 db와 같습니다. 나는 이것 같이 생각하고 있었다 : http://snippi.com/s/m7cl7gr. 그게 효과가 있니? – Roland

+0

나는 그것을 테스트하고 정상적으로 작동합니다. truncate에 대한 팁을 주셔서 감사합니다 :) – Roland

관련 문제