2010-04-24 75 views
0

幹所有, 我似乎無法得到我的頭,這個數字,我看過的例子。基本上我有一個2D數組,並希望將其插入到MySQL中。該數組包含幾個字符串。php推二維數組到mysql

我不能讓下面的工作...

$value = addslashes(serialize($temp3));//temp3 is my 2d array, do i need to use keys? (i am not at the moment) 
$query = "INSERT INTO table sip (id,keyword,data,flags) VALUES(\"$value\")"; 
mysql_query($query) or die("Failed Query"); 

謝謝你們,

回答

0
<?php 

// let's assume we have a 2D array like this: 
$temp3 = array(
    array(
     'some keywords', 
     'sme data', 
     'some flags', 
    ), 
    array(
     'some keywords', 
     'sme data', 
     'some flags', 
    ), 
    array(
     //... 
    ), 
); 

// let's generate an appropriate string for insertion query 
$aValues = array(); 
foreach ($temp3 as $aRow) { 
    $aValues[] = "'" . implode("','", $aRow) . "'"; 
} 
$sValues = "(" . implode("), (", $aValues) . ")"; 

// Now the $sValues should be something like this 
$sValues = "('some keywords','some data', 'someflags'), ('some keywords','some data', 'someflags'), (...)"; 

// Now let's INSERT it. 
$sQuery = "insert into `my_table` (`keywords`, `data`, `flags`) values $sValues"; 
mysql_query($sQuery); 
+1

不錯的例子,我其實不知道你可以在一個SQL語句中插入多行。順便說一句,你也必須用單引號括住這些字段,所以'foreach'中的語句最好是:'$ aValues [] =「'」。 implode(「','」,$ aRow)。 「'」;' – thomaspaulb 2010-04-24 18:17:54

+0

感謝堆,這工作得很好,用正確的語法破解了兩次,看起來沒有什麼技巧 – john 2010-04-25 00:33:39

+0

感謝@littlegreen。你的權利。我糾正了它。 – Alexar 2010-04-25 07:35:13

2

不知道它是一個完整的回答你的問題,但這裏至少幾個可能出現的問題:

  • 您不應該使用addslashes;相反,使用mysql_real_escape_string
    • 知道關於特定於您的數據庫引擎的事情。
  • 在您的SQL查詢,你不應該使用雙引號(")以防萬一字符串值,但單引號('
  • 在您的SQL查詢,你應該在values()儘可能多的領域部分如您在字段列表中有:
    • 在這裏,你有4個領域:id,keyword,data,flags
    • ,但只有一個值:VALUES(\"$value\")
  • 您應該使用mysql_error()知道什麼是在執行SQL查詢
    • 這將幫助你找出存在的問題,你已經得到了精確的錯誤您的疑問;-)
+0

我也找到它有用呼應了查詢,以確保它是你真正希望它是。 – Twelve47 2010-04-24 15:55:12

+0

感謝您的指點,使用mysql_error()告訴我很多錯誤! – john 2010-04-25 00:35:18

+0

不客氣:-)玩得開心! – 2010-04-25 10:41:35

0

作爲已經給出的有用答案的補充,如果您有一個需要插入的大表可能不適合一個SQL語句。但是,爲每一行進行單獨的事務處理也很慢。在這種情況下,我們可以告訴MySQL在一個事務中處理多個語句,這將大大加速插入大表(> 1000行)的插入。

一個例子:

<?php 
function dologin() { 
    $db_username = 'root'; 
    $db_password = 'root'; 
    $db_hostname = 'localhost'; 
    $db_database = 'logex_test'; 

    mysql_connect($db_hostname, $db_username, $db_password); 
    mysql_select_db($db_database); 
} 

function doquery($query) { 
    if (!mysql_query($query)) { 
     echo $query.'<br><br>'; 
     die(mysql_error()); 
    } 
} 

function docreate() { 
    doquery("drop table if exists mytable"); 
    doquery("create table mytable(column1 integer, column2 integer, column3 integer)"); 
} 

function main() { 
    $temp3 = array(
     array('1','2','3',), 
     array('4','5','6',), 
     array('7','8','9',), 
    ); 

    dologin(); 
    docreate(); 
    doquery("start transaction"); 
    foreach($temp3 as $row) 
     doquery("insert into mytable values('" . implode("','", $row) . "')"); 
    doquery("commit") or die(mysql_error()); 
} 

main(); 
?> 
+0

感謝您的回答,我無法得到這個工作,謝謝! – john 2010-04-25 00:34:40

+0

嗨,我增強了數據庫登錄,創建表的例子,使它可以開箱即用(只需檢查'dologin'中的登錄信息)。 – thomaspaulb 2010-04-26 07:47:45

+0

謝謝@littlegreen,我會放棄這個! – john 2010-04-29 13:42:31

0

試試這個:

// lets array 
$data_array = array(
    array('id'=>1,'name'=>'a'), 
    array('id'=>2,'name'=>'b'), 
    array('id'=>3,'name'=>'c'), 
    array('id'=>4,'name'=>'d'), 
    array('id'=>5,'name'=>'e') 
) 
; 
$temp_array = array_map('implode', $data_array, array('","' ,'","','","','","','","')); 
echo $query = 'insert into TABLENAME (COL1, COL2) values(("'.implode('"),("', $temp_array).'"))'; 
mysql_query($query);