2016-09-19 2 views
1

준비된 문으로 처음으로 작업하지만이 오류가 발생합니다. 어떤 이유로 매개 변수로 바인드 유형을 전달할 수 있습니까?값을 바인딩 할 때의 문제

내 코드 : 내가 얻을 쿼리 예를 에코 경우

function insert($table, $columns = array(), $bindTypes, $values = array()) { 
// Store connection. 
$connection = connection(); 
$columnValues = null; 
$index = 1; 

// Prepare unassigned value string. 
foreach ($columns as $column) { 
    $columnValues .= '?'; 
    if ($index < count($columns)) { 
     $columnValues .= ', '; 
    } 
    $index++; 
} 

// Debugg purpose: echo query example: 
echo "INSERT INTO {$table} (" . implode(', ', $columns) . ") VALUES ({$columnValues})"; 

// Prepare statement. 
$statement = $connection->prepare("INSERT INTO {$table} (" . implode(', ', $columns) . ") VALUES ({$columnValues})"); 
$statement->bind_param($bindTypes, implode(', ', $values)); 
} 


insert('test', array('name'), 'i', array(1)); 

는 "테스트 (이름) INTO INSERT VALUES (?)".

나는 아직 학습 멍청 아.

답변

1

PHP> 5.6 버전 : 만약 당신이 사용자 입력에서 테이블 또는 열 이름을 없지만 항상 당신의 스크립트에 하드 코딩이 안

function insert($connection, $table, $columns, $values) { 
    $columnStr = "`".implode("`,`",$columns); 
    $valueStr = str_repeat('?,', count($values) - 1) . '?'; 
    $types = str_repeat('s', count($values)); 
    $statement = $connection->prepare("INSERT INTO `$table` ($columnStr) VALUES ($valueStr)"); 
    $statement->bind_param($types, ...$values); 
    $statement->execute(); 
} 

insert($conn, 'test', ['name'], [1]); 

참고. 삽입물에 대해 별개의 기능을 사용하지 못하게합니다.

+0

참고 : [... $ values] (http://php.net/functions.arguments#functions.variable-arglist) 구문으로 인해 PHP/5.6 +가 필요합니다. –

0

나는 당신이 MySQLi로 게시물을 표시했음을 본다.

대신 훨씬 간단한 방법으로 다양한 수의 매개 변수를 사용할 수 있으므로이 PDO를 사용합니다. PHP 매뉴얼에서 example 5과 아주 비슷한 것을 할 수 있습니다.

1

의이 the docs 살펴 보자 :

부울 mysqli_stmt :: bind_param (문자열 $ 종류, 혼합 & $ var1에 [혼합 & $를 ...]) 첫 즉

, 인수는 데이터 유형을 결정하고 두 번째 매개 변수에서 시작하여 개별 매개 변수로 값을 전달합니다. 당신이 가지고 그러나 :

$statement->bind_param($bindTypes, implode(', ', $values)); 

당신은 ESP, 가장 이해가되지 않습니다 하나의 쉼표로 구분 된 문자열에 모든 개별 값을 결합하고 있습니다. 함수가 인수를 예상한다고 생각하면 참조입니다.

+0

감사합니다. 나는 해결책을 내놓을 수는 없지만 지금 문제를 안다. –

+0

@DennisCastelijns 사용중인 PHP 버전은 무엇입니까? –

+0

@YourCommonSense 5.5.9 –

관련 문제