2014-01-17 61 views
0


创建多个阵列中的单个插入语句值

我有一个关于如何实现我的使用case.I有一组我想在数据库中插入阵列的查询,但现在我很困惑如何我能做到这一点efficiently.I正在使用PHP和MySQL。下面是用例:

$shareUrl = array(); 
$theInsertUrl = array(); 
$authKeyArray = array(); 

以上是加工一些information.Now我必须将它插入到数据库后,我得到的阵列,但不是一个一个地去做,我认为有一个单插入将是更好的解决方案(如果不是请更正)。
对于多重插入我的SQL查询的values部分必须

($shareUrl[0],$theInsertUrl[0],$authKeyArray[0]),($shareUrl[1],$theInsertUrl[1],$authKeyArray[1]),... 

我想编写一个for循环,并创建一个多维数组这样

for($i=0;$i<count_of_array;$i++){ 
     $multiArray[$i]['shareUrl'] = $shareUrl[0]; 
     $multiArray[$i]['theInsertUrl'] = $theInsertUrl[0]; 
     $multiArray[$i]['authKeyArray'] = $authKeyArray[0]; 
    } 

但它仍然将是乏味的使用这在SQL查询的values部分,因为它接受这样的格式,如('val1','val2'),('val1','val2')。我需要关于如何去实施它的建议?上述方法是否正确或有更好的解决方案我应该使用单插入语句吗?

+0

一个忠告是:不要试图太早优化。无论如何,多行单插入的确速度更快 - 当你有很多行时。如果你每天只需插入数十行数据,你就不需要*来优化它,如果我们谈论的是成千上万的数据,你会注意到优化。基本上,您可以节省每个查询与主键生成时间之间的请求时间。 为了帮助您获得更多信息,您是使用纯粹的'mysql_'函数,'mysqli'还是'PDO'? 有些数字也有帮助,比如阵列有多大。 – aleation

+0

我正在使用'mysqli'功能!其实我正在做一个文件共享应用程序。因此,可以同时插入很多插件!最初虽然数量不会很大,但随着我的进步,它会快速增长! – KillABug

+0

对不起,我不熟悉'mysqli',从mysql跳到PDO,我不确定'mysqli'是否已经命名参数绑定,据我所知可以按顺序使用问号'?',但不是:像PDO中的value1。所以我不确定在实现上,更好的让一个更有经验的'mysqli'来回答你。顺便说一句,你应该使用'mysqli'中的准备语句,或者你并不是真的注入安全 – aleation

回答

1

只是把一切作为数组中的字符串,然后爆它

$data= array(); 
for ($i = 0; $i < $size; $i++) { 
    $data[] = "('".$mysqli->real_escape_string($array1[$i])."','".$mysqli->real_escape_string($array2[$i])."')"; 
} 
if (sizeof($data) > 0) { 
    $query = "INSERT INTO table (value1,value2) VALUES ".implode(",",$data).";"); 
    $mysqli->real_query($query) 
} 
+2

你不应该实际上建议有'mysql_query()'函数的人,因为它们被弃用,不是sql注入安全的,特别是如果你甚至不会逃脱数据... – aleation

+0

绝对正确 –

+0

我正在使用'mysqli'! :) – KillABug