我试图将数组中的数据行插入表中。它插入此而不是实际数据:
这是我的代码:
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
变量时遇到了类似的问题,我唯一的解决办法是将值临时传输到临时变量并使用临时变量插入数据库。
答案 0 :(得分:2)
变量太复杂,无法在字符串中使用。 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 :(得分:1)
您可以使用花括号将数组值直接插入双引号字符串中:
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注入。