2013-02-26 3 views
1

그것을 :) 닫기 전에 모든 질문을 읽어 보시기 바랍니다
임과 함께 준비된 문을 찾고 mysqli (중요하지 PDO, 나는 그것을 사용할 수 없으며 일부 PDO 코드를 전송할 수 없기 때문에 mysqli.), 어디에 내가 많은 값 (약 2000) 긴 쿼리를 삽입 할 수 있습니다. 하지만 쿼리를 준비해야합니다. 준비 여러 삽입 mysqli


그래서 내가 그렇게 시작 :

$array = array("a1", "a2", "a3","a5", "a7", "a5","a9", "a32", "a3", "a4"); 
// AND SO ON UP TO 2000 
$type = "s"; 
$end = count($array); 

$query = "INSERT INTO table (value) VALUES (?)"; 
for ($i = 0; $i <= $end - 1; $i++) 
{ 
    $query .= ", (?)"; 
    $type .= "s"; 
} 

$stmt = $conn->prepare($query); 
$stmt->bind_param("$type", /* PROBLEM */); // HERE IS THE PROBLEM!!! 
$stmt->execute(); 
$stmt->close(); 


하지만 지금 내 문제, 어떻게 "bind_param"의 변수를 바인딩 할 수 있습니다 dynamicaly?
"실행"에 대한 for-loops와 같은 것을 보여주지 마십시오. 2000 삽입물에는 너무 느리기 때문에 :).

나는

$allvalues = ""; 
foreach ($array as $value) 
{ 
    $allvalues .= "$value "; 
} 
$stmt->bind_param("$type", $allvalues); 

그러나 물론, 나는 그 바인딩 어차피 같은 것을 의미한다.

+0

"(중요하지 PDO, 나는 그것을 사용할 수 없으며 일부 PDO 코드를 전송할 수 없기 때문에 mysqli.) "- PDO는 대부분의 사람들이 데이터베이스를 선택하는 교차 데이터베이스입니다. – Nick

+0

하지만 왜 다른 데이터베이스를 사용해야합니까? 나는 mysql 만 필요로하고, PDO와 mysqli를 테스트했으며, mysqli는 ** 항상 ** 빠르기 때문에 PDO가 필요 없다. –

+1

@CopyDevil 그 자리에 당신의 증거는 어디 있습니까? – Neal

답변

4

call_user_func_array을 사용하여 배열을 사용하여 함수를 호출하십시오.

하거나 실행에 이르기까지 모든 변수를 통과, 그럼 당신도 사용할 필요가 없습니다 bind_param

+9

@ CopyDevil 작은 코드로 작업하도록 코드를 수정하려면 함수에 2000 개의 인수를 전달하면 결국에는 ... \ * sunglasses \ * Stack Overflow가 발생합니다. * YYYEEEEEEAAAAAAAAAAAAAHHHHHHHHHHHH * \ * guitar riff \ * – Sammitch

+0

자, 확인해 보겠습니다. :) –

+1

@Sammitch,이 사이트에서 본 최고의 순간이었습니다. – Pachonk