Вставка экземпляров массива в таблицу с использованием цикла for - PullRequest
0 голосов
/ 03 февраля 2012

Я пытаюсь вставить строки данных в массиве в таблицу. Он вставляет это вместо фактических данных:

enter image description here

Вот мой код:

for ($i = 0; $i < $arraycount; $i++)
{
    $db->query("INSERT INTO contact_tariffs (qid, retail_name, tariff_name, tariff_net, tariff_rental, tariff_inclusive, tariff_length, tariff_data)
                Values ('$qid', '$quote->retail_name[$i]', '$quote->tariff_name[$i]', '$quote->tariff_net[$i]', '$quote->tariff_rental[$i]', '$quote->tariff_inclusive[$i]', '$quote->tariff_length[$i]', '$quote->tariff_data[$i]' )");                        
}

У меня были похожие проблемы при использовании переменных $_POST и $_SESSION, и единственное решение, которое у меня было для этого, это временно перенести значения во временные переменные и использовать временные переменные для вставки в базу данных.

Ответы [ 2 ]

2 голосов
/ 03 февраля 2012

Переменные слишком сложны для использования внутри строки.PHP интерпретирует $quote->retail_name как одну переменную, а $i - другую, потому что не знает, где заканчивается одна переменная и где начинается другая.Например:

$i = 1;
$quote->retail_name[ 1 ] = 'foo';

echo "result: $quote->retail_name[$i]";  // --> result: Array[1]
// the above is the same as 
// echo $quote->retail_name; echo "["; echo $i; echo "];

echo "result: ".$quote->retail_name[$i]; // --> result: foo
// The above leaves the variable outside the string so it's parsed correctly.
// You could also use "result: {$quote->retail_name[$i]}"

См. Также http://www.php.net/manual/en/language.types.string.php#language.types.string.parsing

Попробуйте вместо этого:

for ($i = 0; $i < $arraycount; $i++)
{
    $db->query("INSERT INTO contact_tariffs (qid, retail_name, tariff_name, tariff_net, tariff_rental, tariff_inclusive, tariff_length, tariff_data)
                Values ('$qid', '".$quote->retail_name[$i]."', '".$quote->tariff_name[$i]."', '".$quote->tariff_net[$i]."', '".$quote->tariff_rental[$i]."', '".$quote->tariff_inclusive[$i]."', '".$quote->tariff_length[$i]."', '".$quote->tariff_data[$i]."' )");                        
}

Хотя вы должны также избегать значений.Что-то вроде PDO было бы предпочтительнее.

1 голос
/ 03 февраля 2012

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

for ($i = 0; $i < $arraycount; $i++)
{
    $db->query("INSERT INTO contact_tariffs (qid, retail_name, tariff_name, tariff_net, tariff_rental, tariff_inclusive, tariff_length, tariff_data)
                Values ('{$qid}', '{$quote->retail_name[$i]}', '{$quote->tariff_name[$i]}', '{$quote->tariff_net[$i]}', '{$quote->tariff_rental[$i]}', '{$quote->tariff_inclusive[$i]}', '{$quote->tariff_length[$i]}', '{$quote->tariff_data[$i]}' )");                        
}

... и, пожалуйста, помните о SQL-инъекциях.

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