2013-02-26 78 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循环,因为这对于2000插入来说太慢了:)。

我的意思是这样

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

但当然,我不能说绑定。

+0

“(重要的是,没有PDO,因为我不能用它并不能一些PDO代码转移到)“ - PDO是跨数据库这就是为什么大多数人选择它... – Nick 2013-02-26 16:19:44

+0

好吧,但为什么我应该使用不同的数据库?我只需要mysql,我测试过PDO vs mysqli和mysqli是**总是**更快,所以不需要PDO。 – 2013-02-26 16:22:58

+1

@CopyDevil你的证明在哪里? – Neal 2013-02-26 16:23:40

回答

4

使用call_user_func_array使用数组调用函数。

或者只是传递全部通过执行变量,那么你甚至不需要使用bind_param

+9

@CopyDevil你可能想修改你的代码以使用更小的块,我敢打赌,一个将2000个参数传递给一个函数的美元最终会导致...... \ Stack Overflow。 * YYYEEEEEEAAAAAAAAAAAAAHHHHHHHHHHHH * \ *吉他即兴创作* – Sammitch 2013-02-26 16:34:04

+0

好吧,我会测试它:) – 2013-02-26 16:35:00

+1

@Sammitch,这是我在这个网站上看到的最好的时刻。 – Pachonk 2013-03-24 20:10:19