将PHP变量和数组插入MySQL

时间:2014-06-08 12:12:05

标签: php mysql sql arrays

我有一个包含多个选择框的表单。因此,我将变量插入数据库(例如输入字段的内容)以及数组 - 多个选择框值。

我尝试将此作为两个单独的查询,但在第一次查询后出现错误:

  

列数与第1行的值计数不匹配

这是我的代码片段(第一个查询),通过调试注释掉:

$instruments = mysqli_real_escape_string($con, $_POST['instruments']);
//var_dump($_POST['instruments']);

$columns = implode(", ",array_keys($instruments));
//var_dump($columns);

$escaped_values = array_map('mysql_real_escape_string', array_values($instruments));
//var_dump($escaped_values);

$values  = implode(", ", $escaped_values);
//var_dump($values);

$sql = "INSERT INTO `depfinder_sandbox`(instrument1, instrument2, instrument3, instrument4, instrument5) VALUES ($values)";

$result1 = mysqli_query($con, $sql) or die(mysqli_error($con));

调试时,我发现了以下内容:

    尽管设置了变量,
  • var_dump($instruments)仍返回NULL。
  • 但是,var_dump($_POST['instruments'])应该返回。
  • 如果我使用$_POST['instruments'],则var_dump($escaped_values)会返回string(4) "0, 1",这是不正确的。
  • 无论我做什么,
  • var_dump($values)都会返回NULL。

即使变量按预期返回,我仍然会有列计数问题,因为$instruments[]可以包含1到5个值,但查询规定5(instrument1,instrument2,instrument3,instrument4, instrument5)?

更新

这就是我现在所拥有的:

foreach ($_POST['instruments'] as $key => $value)
{ 
    $instruments[$key] = mysqli_real_escape_string($con, $value);
}

var_dump($instruments); // returns perfectly

$columns = implode(", ",array_keys($instruments));
var_dump($columns); // returns: string(4) "0, 1"

$values  = implode(", ", $columns);
$sql = "INSERT INTO `depfinder_sandbox`(instrument1, instrument2, instrument3, instrument4, instrument5) VALUES ($values)";
$result1 = mysqli_query($con, $sql) or die(mysqli_error($con)); // returns: Column count doesn't match value count at row 1

0 个答案:

没有答案