2013-04-20 4 views
-1

В настоящее время работает над сервисным скриптом с другом. Когда я говорю сценарий службы, я имею в виду, что он будет использоваться только для обновления и добавления значений в базу данных. Теперь мой друг сохранил все ее скоро, чтобы быть значениями базы данных в виде массивов.Несколько массивов - Вставить значение в базу данных

Мне уже удалось войти в один из массивов, теперь я смущен тем, как это сделать для нескольких массивов. Таким образом, все это больше связано с тем, как я могу реорганизовать текущий текущий код , чтобы быть более динамичным.

Также, пожалуйста, имейте в виду, что у нее есть сотни массивов, которые нужно сделать так, чтобы не было 2 или 3 его буквально сотен.

Мой обновленный код: (пожалуйста, прочитайте комментарии)

$colors['Colors_All'] = array("Black","Charcoal"); // Add unique indexes 
$colors['Colors_Bright_All'] = array("Silver","White"); // Add unique indexes 

$AllArrays = get_defined_vars(); // Get all defined vars 
$Arrays = array(); // Set a default array 

foreach ($AllArrays as $varName => $value) { // Run through all the variables set in AllArrays 
     if(is_array($value) && $varName == 'colors') { // If array is colors then 
       $Arrays = array_merge($Arrays, $value); // Merge those arrays into the new array 
     } 
} 

var_dump($Arrays); 

$sql = "INSERT INTO `product_features` ("; // Create the initial query 

foreach ($Arrays as $column => $value) { // ForEach over the array 
     $sql .= "$column,"; // Use the Key Example : 'Colors_All and Color_Bright_All' as a column name 
} 

$sql2 = rtrim($sql, ","); // trim the initial "," from the columns at the end 
$sql2 .= ")"; // Close off the columns names 
$sql2 .= " VALUES "; 

foreach ($Arrays as $column => $value) { // This is where the problem starts -_- 
     foreach ($value as $key => $insert) { // Get the value 
       $sql2 .= "('$insert', '$insert'),"; // I need to have unique values here :(
     } 
} 

$finSQL = rtrim($sql2, ","); // Strip off the remaining "," 

Также я знаю, что я не обязательные параметры, я один раз я получаю фактический жесткий материал из пути.

Теперь при выполнении дампа $ finSQL я получаю это:

string(152) "INSERT INTO `product_features` (Colors_All,Colors_Bright_All) VALUES ('Black', 'Black'),('Charcoal', 'Charcoal'),('Silver', 'Silver'),('White', 'White')" 

Как я могу иметь уникальные значения быть ЗНАЧЕНИЯ в моей вставки запроса? Это последняя часть этого, которая меня сбивает с толку.

+0

У вас есть много определенных переменных определенный в PHP-скрипте? Я бы не рекомендовал его, но если они не следуют явному шаблону, вы можете попробовать использовать 'get_defined_vars()'. Можете ли вы показать немного больше своего кода? – calcinai

+0

Не могли бы вы изменить то, что вы только что набрали? Куча определенных переменных, определенных в PHP-документе? И я посмотрю на get_defined_vars() –

+1

Кажется, что вам не хватает разумного ключа, чтобы связать различные цвета вместе. Это поможет, если вы объясните, как должна выглядеть конечная база данных. –

ответ

0

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

<?php 
ini_set("error_reporting", E_ALL); 
ini_set("display_errors", TRUE); 

$conn = new MysqlI("HOST", "USER", "PASSWORD", "DATABASE" /*Optionally put the PORT NUMBER HERE : , 3306 */);  
$conn->set_charset('utf8'); // Always explicitly state the character encoding! 

$clearSQL = "TRUNCATE TABLE `product_features`;"; 
$clearNOW = $conn->prepare($clearSQL);// For updating this will delete all records in the table 
$clearNOW->execute(); 

$colors['Colors_All'] = array("Black", "Charcoal", "Pink", "Cheese", "Dog", "Punk"); // Add unique indexes 
$colors['Colors_Bright'] = array("Silver", "White", "Yellow", "Blue", "Indigo"); // Add unique indexes 
$colors['Colors_Bright_All'] = array("Silver", "White", "DarkYellow", "Dark_Pink",); // Add unique indexes 
$colors['Colors_Dark'] = array("Silver", "White", "DarkWE", "DarkCheese", "DarkBla"); // Add unique indexes 
$colors['Colors'] = array("Silver", "White", "DarkIDK", "DarKsome", "waDark", "dark"); // Add unique indexes 
$colors['Colors_Green'] = array("Silver", "White", "WAA", "WIWIW", "OMG", "Blood"); // Add unique indexes 
$colors['Colors_Red'] = array("Silver", "White", "IRI", "owow", "Darkness", "night"); // Add unique indexes 

$AllArrays = get_defined_vars(); // Get all defined vars 
$Arrays = array(); // Set a default array 

foreach ($AllArrays as $varName => $value) { // Run through all the variables set in AllArrays 
    if (is_array($value) && $varName == 'colors') { // If array is colors then 
     $Arrays = array_merge($Arrays, $value); // Merge those arrays into the new array 
    } 
} 

$sql = "INSERT INTO `product_features` (`ArrayIndex`, `ArrayValues`) VALUES "; // Create the initial query 

foreach ($Arrays as $ArrayIndex => $Arrayvalues) { // ForEach over the array 
    $sql .= "('$ArrayIndex','" . $mysqli->mysqli_real_escape_string(serialize($Arrayvalues)) . "'),"; // Use Array Index as the Unique Array Identifyer and Arrayvalues for the value 
} 

$finSQL = rtrim($sql, ","); // Strip off the remaining "," 

var_dump($finSQL); // Check the query 

$INSERT = $conn->prepare($finSQL); // Get query ready 
$INSERT->execute(); // Execute 

?> 

И результат того, что в базе данных this

+0

все этот материал с '$ AllArrays' является абсолютно бесполезным **. Вы получаете ** точно такой же массив' $ colors' **, который у вас уже есть. И хранение сериализованных массивов в базе данных не имеет смысла. –

+0

Кто заботится о том, что имеет для вас смысл? - Кто ты? oO ... это работает, и я добился успеха. Я отвечаю только на свой ответ, поскольку то, что вы и то, что говорили другие, абсолютно бесполезны. Поэтому, пожалуйста, сделайте что-нибудь с вашей жизнью. - Благодаря. –

+0

Если у вас есть лучший способ сделать это, пожалуйста, расскажите. Это не моя проблема, я никогда не буду хранить массивы в базе данных, но я столкнулся с проблемой, с которой столкнулся член SO, и я попытался помочь. В отличие от других –

1

Положить $ Colors_Bright_All, $ Colors_Light_Все в один последний массив можно сказать $ finalArray и использовать цикл foreach для циклического прохождения через этот массив, а затем выполнить ваш существующий цикл foreach.

+0

Правильно, но теперь мне нужно, чтобы эти значения были вставлены в разные столбцы в базе данных на основе их имени массива –

+0

, если name = foo, а затем вставить в else, если name = yo, а затем вставить в b. Вол. Однако вы должны использовать отдельные массивы. – Jonast92

+0

Хорошо, я мог бы придумать решение, но у меня есть вопрос к вам. Как объединить ~ 300 массивов, не набирая их? (да буквально около 300 массивов) –

-1
<?php 
function myInsert($myArray) 
{ 
    $colour_value = ""; 
    $stmt = $mysqli->prepare("INSERT INTO `product_features` (Colors_All) VALUES (?)"); 

    if ($stmt) { 
     $stmt->bind_param("s", $colour_value); 


     foreach ($myArrayas AS $value) { 
      $colour_value = $value; 
      $stmt->execute(); 
     } 

     $stmt->close(); 
    } 
} 


function myInsert($Colors_Bright_All); 
function myInsert($Colors_Light_All); 
?> 

EDIT

<?php 
$newArray = array(); 

foreach($_GLOBALS as $val) 
{ 
    if(substr($val, 0, 7) == "Colors_") 
     myInsert($val); 
} 

?> 
+0

поэтому функция для 100 + массивов ... да. .. нет .. что ты только что сделал? –

+0

Мой текст отсутствовал. Да, я знаю, что они похожи, вы использовали только частично подготовленное заявление. В вашем вопросе вы не указываете, откуда вы получаете массивы. Вы просто вызываете функцию в цикле с каждым массивом. – Bradmage

+0

Чтобы иметь более 100 массивов, которые я должен был бы взять из базы данных? Или они жестко закодированы? вы просто используете foreach ($ result as $ data) myInsert ($ data); – Bradmage

0

В качестве решения вашей вышеупомянутой проблемы, пожалуйста, попробуйте запустить следующий фрагмент кода

Э.Г.

$finalarray=array(); 

    $Colors_Bright_All = array("Silver","White","Gold","Royal_Blue","Dodger_Blue","Deep_Sky_Blue","Deep_Green","Forest_Green","Bright_Green","Violet"); 

    $Colors_Light_All = array("Light_Gray","Silver","White","Gold","Dodger_Blue","Deep_Sky_Blue","Light_Blue","Bright_Green","LightGreen","Light_Green"); 

array_push($finalarray,'('.join(',',$Colors_Bright_All).')'); 
array_push($finalarray,'('.join(',',$Colors_Light_All).')'); 

    $value=join(',',$finalarray); 

$sql = "INSERT INTO `product_features` (Colors_All) VALUES ".$value; // Build the initial query 
$finSQL = rtrim($sql, ","); // Strip the last , so our mysql query doesn't goof up. 
$stmt = $conn->prepare($finSQL); 
$stmt->execute(); 
0

Как вы уже сказали, в других ответах уже, чтобы сделать вложенный массив является единственным вменяемым способом

$colors['bright'] = array("Silver","White","Gold"...); 
$colors['light'] = array("Light_Gray","Silver","White"...); 

foreach ($colors as $type => $array) { 

    // put your code here 

} 

, если вам нужно больше данных для вставки рядом только $type (как это не может быть сказал из вашего крайне неопределенного вопроса), вы можете добавить массив с этими данными, а также

+0

Не думал, что это расплывчато ... У меня теперь есть фрагмент кода, который мне нужен, мне нужна эта часть кода для динамического добавления данных из массива в базу данных. Извините, если это то, что бросается в глаза. –

+0

«код для динамического добавления данных из массива в базу данных» - ваш код делает это уже. Есть и другие проблемы, с которыми вы сталкиваетесь, но по-прежнему прятаться от людей. –

+0

Скрытие? : S Я потерян. Извините, если вы так думаете. Я подумал, что, когда я написал этот вопрос, он был хорошо написан и по существу: S –

0

если ваш код работает нормально, а затем изменить

foreach ($Arrays as $column => $value) { // This is where the problem starts -_- 
     foreach ($value as $key => $insert) { // Get the value 
       $sql2 .= "('$insert', '$insert'),"; // I need to have unique values here :(
     } 
} 

в

foreach ($Arrays as $column => $value) { // The problem will be fixed :D 
     $sql2 .="("; 
     foreach ($value as $key => $insert) { // Get the value 
       $sql2 .= "'$insert',"; // You will have unique values here :D 
     } 
     $sql2 = chop($sql2,","); // strip the ending , 
     $sql2 .= "),"; 
} 
Смежные вопросы