вставьте массив php в mySql - PullRequest
       2

вставьте массив php в mySql

1 голос
/ 05 сентября 2011

Я ищу руководство.

У меня есть поле формы данных, которое я вставляю в таблицу и ищу связь данных с идентификаторами других соответствующих данных. Мне было интересно, если есть рекомендуемый способ вставить массив соответствующих идентификаторов в связи с информацией, на которую я тоже ссылаюсь.

Вот то, о чем я думаю ...

Например. PHP читает

 <?php
 $name = $_POST['name'];
 $info = $_POST['information'];
 $id = $_POST['id'];
 $family = array();
 ?>
 <?php 

 $select = "SELECT * 
              FROM  `names_family` 
              WHERE  `name` LIKE  '$name'
              LIMIT 0 , 30";

 $selected  = mysql_query($select, $connection);
if(!$selected){
die("Hal 9000 says: Dave the select family name ID query failed " . mysql_error());}


 while($row = mysql_fetch_array($selected)){
       $familyId = $row[0];
       $familyName = $row[1];

 array_push($family, $familyName => $familyId);            

}

 $insertInfo = "INSERT INTO `family_info`.`info` 
            (`name`, `info`, `family`)
            VALUES (
            '$name', '$info', '$family');";

 $insertedInfo  = mysql_query($insertInfo, $connection);
if(!$insertedInfo){
die("Hal 9000 says: Dave the insert info query failed " .   mysql_error());}
 ?>

Это рекомендуемый способ передачи информации? Или это другой способ добиться того же результата?

Ответы [ 2 ]

2 голосов
/ 05 сентября 2011

Какой тип данных является столбцом «семейство» в MySQL? Я почти уверен, что вы не можете вставлять php-массивы в MySQL. Если это возможно, угадайте, что это одна из тех вещей, которых я не знал, потому что я даже не пытался.

Самый простой способ сделать это - закодировать ваш массив php в строку JSON и декодировать его обратно в массив php, когда вы читаете его.

$family = array();
...
$familyJsonString = json_encode($family);
...
$insertInfo = "INSERT INTO `family_info`.`info` 
            (`name`, `info`, `family`)
            VALUES (
            '$name', '$info', '$familyJsonString');";
...
$queryString = "SELECT * FROM family_info WHERE name = '$someName'";
$query = mysql_query($queryString, $connection);
$familyData = mysql_fetch_assoc($query);
$decodedFamilyArray = json_decode($familyData['family']);

где столбец семейства должен быть типом varchar или text, в зависимости от того, как долго получается массив семейства.

Более надежный способ сделать это - создать отдельную таблицу для хранения данных вашего семейства и использовать оператор MySQL JOIN для получения значений, связанных с одной записью в таблице family_info.

вот некоторая информация о соединениях

Соединение двух таблиц без возврата нежелательной строки

http://dev.mysql.com/doc/refman/5.0/en/join.html

1 голос
/ 05 сентября 2011

есть другой способ

      $family=array()
     while($row = mysql_fetch_array($selected)){
           $familyId = $row[0];
           $familyName = $row[1];

      $family[]=$familyName.$familyId;            

    }

 $insertInfo = "INSERT INTO `family_info`.`info` 
            (`name`, `info`, `family`)
            VALUES (
            '$name', '$info', '$family');";
...