mysql içine 2d dizi itin php

3 Cevap php

Hay All, I cant seem to get my head around this dispite the number to examples i read. Basically I have a 2d array and want to insert it into MySQL. The array contains a few strings.

Ben şu işe alınamıyor ...

$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");

Teşekkürler Çocuklar,

3 Cevap

Emin değil bu soruya tam bir cevap olacak, ama burada olası sorunların en azından bir çift:

  • You should not use addslashes ; instead, use mysql_real_escape_string
    • Bu knows veritabanı motoruna özgü şeyleri.
  • SQL sorgusunda, çift tırnak (") civarı dize değerleri, ancak tek-tırnak kullanmak gerektiğini (')
  • In your SQL query, you should have as many fields in the values() section as you have in the list of fields :
    • id,keyword,data,flags: Burada, 4 alanlar var
    • ama sadece bir değeri: VALUES(\"$value\")
  • You should use mysql_error() to know what was the precise error you've gotten while executing the SQL query
    • Bu sizin sorgularda sorunları bulmanıza yardımcı olur ;-)

Yararlı cevapları bir ek zaten verili olarak size takmanız gerekir büyük bir tablo varsa, bir SQL deyiminde uygun olmayabilir. Ancak, her satır için ayrı bir işlem yapmadan da yavaş. Bu durumda, biz (> 1000 satır) büyük tablolar için büyük ölçüde ekleme hızlandıracak, tek bir işlemle birden ifadeleri işlemek için MySQL söyleyebilirim.

Örnek:

<?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();
?>

Bu deneyin:

// 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);