Как вставить преобразованный массив в MySQL? (Php) - PullRequest
1 голос
/ 27 февраля 2010

Я преобразовал данные JSON в массив, но теперь я хотел вставить их в свою базу данных, я продолжаю получать массив

вот код

    for ($i=0; $i<=$checking; $i++) {

    $catid = $ids[$i];
    $catname = $names[$i];
    $catapps = $apps[$i];
    $caturl = $iconurls[$i];

$query = "INSERT INTO cat VALUES ('".$catid."','".mysql_real_escape_string($catname)."','".$catapps."','".mysql_real_escape_string($caturl)."')";
mysql_query($query);



};

Ответы [ 4 ]

1 голос
/ 27 февраля 2010

Я хочу предложить вам использовать AdoDB для лучшей вставки / обновления данных в MySQL.AdoDB делает автоматическое экранирование, когда вы вставляете / обновляете, используя AutoExecute.Вот пример использования:

$catid = $ids[$i];
$catname = $names[$i];
$catapps = $apps[$i];
$caturl = $iconurls[$i];
//set table name
$table_name = 'cat';
//set field values
$data = array (
  'catid' => $catid,
  'catname' => $catname,
  'catapps' => $catapps,
  'caturl' => $caturl
);
//do insert
$result = $adodb->AutoExecute($table_name, $data, 'INSERT');

Обратите внимание, что ключ, используемый в массиве $data, является именем столбца в таблице cat в MySQL, поэтому настройте его в соответствии с именем столбца в вашей базе данных..

Если вы хотите вставить массив в столбец mysql, тогда я предлагаю вам использовать serialize при вставке, затем при извлечении данных используйте unserialize перед отображением или обработкой.

0 голосов
/ 27 февраля 2010

Делаем это с PDO и готовим заявления:

try {

   // connect to the DB
   $dbh = new PDO('mysql:host=localhost;dbname=my_db','user','password');

   // prepare the query : it will be faster and safer
   $query = $dbh->prepare("INSERT INTO cat VALUES (id, name, app, url) VALUES (:id, :name, :app, :url)");


   // tell which vars will be used to fill the query
   $query->bindParam(':id', $catid);
   $query->bindParam(':name', $catname);
   $query->bindParam(':app', $catapps);
   $query->bindParam(':url', $caturl);

   // execute your stuff
   for ($i = 0; $i <= $checking; $i++) {

        $catid = $ids[$i];
        $catname = $names[$i];
        $catapps = $apps[$i];
        $caturl = $iconurls[$i];

        $stmt->execute();

   };

} catch (PDOException $ e) { // обрабатывать ошибки соединения }

$ dbh = NULL;

0 голосов
/ 27 февраля 2010

Составьте один запрос путем объединения значений. визави:
(с небольшим количеством reorg для ясности)

 $query = "INSERT INTO cat VALUES ";

 for ($i=0; $i<=$checking; $i++) 
 {
    if ($i > 0)
        $query .= ',';
    $catid = intval($ids[$i]);
    $catname = mysql_real_escape_string($names[$i]);
    $catapps = mysql_real_escape_string($apps[$i]);
    $caturl = mysql_real_escape_string($iconurls[$i]);
    $query .= "($catid, '$catname', '$catapps', '$caturl')";
 }
 mysql_query($query);
0 голосов
/ 27 февраля 2010

в каком столбце содержится 'Array'? попробуйте print_r или var_dump $catid, $catname, $catapps и $caturl.

если у вас есть 'Array' это возможно потому, что хотя бы один из них является массивом. когда php пытается привести массив в строку (например, при объединении его со строкой), он преобразуется в строку 'Array'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...