PHP толкать 2d массив в MySQL - PullRequest
       11

PHP толкать 2d массив в MySQL

0 голосов
/ 24 апреля 2010

Hay All, Кажется, я не могу разобраться в этом, несмотря на количество примеров, которые я прочитал. В основном я имею 2d массив и хочу вставить его в 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");

Спасибо, ребята,

Ответы [ 4 ]

2 голосов
/ 24 апреля 2010

Не уверен, что это будет полный ответ на ваш вопрос, но здесь как минимум пара возможных проблем:

  • Не следует использовать addslashes; вместо этого используйте mysql_real_escape_string
    • Он знает о вещах, специфичных для вашей базы данных.
  • В вашем запросе SQL не следует использовать двойные кавычки (") в виде строковых значений, а одинарные кавычки (')
  • В вашем запросе SQL у вас должно быть столько же полей в разделе values(), сколько в списке полей:
    • Здесь у вас есть 4 поля: id,keyword,data,flags
    • но только одно значение: VALUES(\"$value\")
  • Вы должны использовать mysql_error(), чтобы узнать, какую именно ошибку вы получили при выполнении запроса SQL
    • Это поможет вам найти проблемы в ваших запросах; -)
0 голосов
/ 28 апреля 2013

Попробуйте это:

// 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);
0 голосов
/ 24 апреля 2010

В дополнение к уже полученным полезным ответам, если у вас есть большая таблица, которую нужно вставить, она может не вписаться в один оператор 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 голосов
/ 24 апреля 2010
<?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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...