2017-12-24 19 views
0

를 소유하고 준비합니다.PHP의 mysqli 내가 데이터베이스에 레코드를 추가하는 방법을 쓰고 싶어 문은 클래스

내 방법 :

final public function newData($sql, $placeholder, $array) { 
    $stmt = $this->db->prepare($sql); 
    $stmt->bind_param($placeholder, implode(",", $array)); 
    return $stmt->execute(); 
} 

..................

// Code---Example 
$sql = "INSERT INTO table (name, data) VALUES (?,?)"; 

$placeholder = "ss"; 

final public function newData($sql, $placeholder, [$array]) { 
    $stmt = $this->db->prepare($sql); 
    $stmt->bind_param($placeholder, implode(",", $array)); 
    return $stmt->execute(); 
} 

내 문제는 내가 여러 값을 저장하려는 경우입니다 이 방법. 나는 경고를

경고를 얻을 : mysqli_stmt :: bind_param을() : 유형 정의 문자열에있는 요소의 수 내가 뭘 잘못 ##

에 바인드 변수의 수와 일치하지 않는 이유는 무엇입니까?

+0

왜 여기이'newData' 방법입니다 : 같은

final public function newData($sql, $placeholder, $array) { $stmt = $this->db->prepare($sql); $stmt->bind_param($placeholder, ...$array); return $stmt->execute(); } 

그런 다음 사용할 수 있습니까? 어느 쪽을 사용합니까? –

+0

두 번째 방법은 코드 예제입니다. – User0101

+0

__what__ 예제? –

답변

1

당신은 $stmt->bind_param() 그 방법을 사용할 수 없습니다. bind_param 다음 인수로 각각의 값을 입력을 필요로하기 때문에 인수 풀기를 할 필요가있다.

$sql = "INSERT INTO table (name, data) VALUES (?,?)"; 

$result = $theDbClass->newData($sql, 'ss', ['foo', 'bar']); 
+0

고마워요! 이 줄의 세 점은 무엇을 의미합니까? $ stmt-> bind_param ($ 자리 ... $ 배열); 에게 그들이 무엇을? 이 방법이 없다면이 방법은 효과가 없습니다. 나는 그런 것을 본 적이 없어! :-) – User0101

+0

그게 무슨 인수 압축 풀기 않습니다, https://wiki.php.net/rfc/argument_unpacking - 그것도 [pack()] (http://php.net/manual/ko/)와 같은 기능에 매우 편리합니다. function.pack.php) –