【发布时间】:2015-02-19 16:15:12
【问题描述】:
我正在基于 userCake 源代码建立一个网站。此时我有一个数组,我想插入到我的 MySQL 数据库中。
我从表单中获取数组的数据。这是构建数组的代码:
$pauzes = array();
foreach($users as $usr)
{
$pauzes = array_merge($pauzes, array(
$usr['username'] => $_POST[$usr['username']]));
}
当我在这段代码之后调用 print_r($pauzes) 时,可能的输出可能是:
数组([jules] => 12.30-13.00 [marc] => 12.30-13.00 [nick] => 13.30-14.00 [paulo] => --- [kevin] => --- [rick] => --- [sanam] => --- [yvette] => --- [bas] => -- - [布鲁斯] => --- )
('---'表示没有选择时间)
userCake 的工作方式我将不得不使用 bind_param,但我无法发送数组 (???) 我找到了一些如何从数组中获取数据的代码,所以输出应该类似于用户名时间
这是应该将数据写入数据库的函数:
function add_pauze($datum, $pauzes)
{
GLOBAL $mysqli, $db_table_prefix;
// array $pauzes opdelen in aparte stukken zodat deze kan worden opgeslagen in de database
if(is_array($pauzes))
{
$data = array();
foreach($pauzes as $row){
$naam = mysqli_real_escape_string($mysqli,$row['username']);
$tijd = mysqli_real_escape_string($mysqli, $row['tijd'] );
$data[] = "($naam', '$tijd')";
}
}
$stmt = $mysqli->prepare("INSERT INTO " . $db_table_prefix . "pauzes
(
datum,
gegevens
)
VALUES
" . implode(',', $data) ."
");
$stmt->bind_param("ss", $datum, $naam, $tijd);
$result = $stmt->execute();
$stmt->close();
return($result);
}
当我现在尝试插入数据时,我收到了几个带有非法字符串偏移的警告。我相信这是因为 $naam ($row['username']) 和 $tijd ($row['tijd']) 没有在数组中定义?
我尝试将构建数组的代码更改为如下所示:
$pauzes = array();
foreach($users as $usr)
{
$pauzes = array_merge($pauzes, array(
"username" => $usr['username'] , "tijd" => $_POST[$usr['username']]));
}
但是我的数组不再正确了:
数组([用户名] => bruce [tijd] => --- )
所以现在我想知道如何将我的数组(右一个在这篇文章的顶部)插入到我的数据库中。
提前致谢!
--- 更新信息---
我更改了构建数组的代码:
$pauzes = array("user" => array(), "pauze" => array());
foreach($users as $usr)
{
array_push($pauzes['user'], $usr['username']);
array_push($pauzes['pauze'], $_POST[$usr['id']]);
}
当我执行 print_r($pauzes) 时,输出为:
数组 ( [user] => 数组 ( [0] => jules [1] => marc [2] => nick [3] => paulo [4] => kevin [5] => rick [6] => sanam [7] => yvette [8] => bas [9] => bruce ) [pauze] => 数组 ([0] => 13.30-14.00 [1] => --- [2] => --- [3] => 13.00-13.30 [4] => --- [5] => 12.00-12.30 [6] => --- [7] => --- [8] => -- - [9] => --- ) )
函数 add_pauze 更新如下:
function add_pauze($datum, $pauzes)
{
GLOBAL $mysqli, $db_table_prefix;
// array $pauzes opdelen in aparte stukken zodat deze kan worden opgeslagen in de database
if(is_array($pauzes))
{
$data = array();
foreach($pauzes as $row){
$naam = $row['user'];
$tijd = $row['pauze'];
$data[] = "('$naam', '$tijd')";
}
}
$stmt = $mysqli->prepare("INSERT INTO " . $db_table_prefix . "pauzes
(
datum,
naam,
tijd
)
VALUES
" . implode(',', $data) ."
");
$stmt->bind_param("ss", $datum, $naam, $tijd);
$result = $stmt->execute();
$stmt->close();
return($result);
}
当我在这个函数中回显sql语句时,输出为:
INSERT INTO applepauzes ( datum, naam, tijd ) VALUES ('', ''),('', '')
这是因为 user 和 pauze 索引无法识别。
我的数据库中用于表 applepauzes 的列是:
- 身份证
- 基准
- naam
- tijd
在naam中需要存储用户名。 在 tijd 中需要存储休息时间(pauze)。
按照 cmets 的要求,当我执行 print_r($datum) 时,输出为:
2015-02-21(写作时的当前日期)
【问题讨论】:
-
您好,您是否尝试过检查您在流程结束时生成的 SQL 字符串?您可以通过直接在数据库上尝试该 sql 语句来获取有关正在发生的事情的更多信息。另一件事我会尝试暂时使用 if 语句并填充时间 00:00 - 00:00 如果它是空的。所以我可以看到确切的问题。如果您确定您的数组+您创建的sql语句,我认为您将更好地了解您的问题。
-
它使用
mysqli而不是PDO。两者非常不同。 -
@SühaBoncukçu - sql 语句返回两次名称和两次时间,并希望将其插入数据库。我也把array_merge改成了array_push,不知道这样好不好?
-
你实际上有很多问题......你对很多事情感到困惑。
print_r($datum)看起来像什么?表pauzes有哪些列?需要插入哪些数据以及插入哪些列?我可以告诉你如何解决这个问题,但我需要知道这些事情才能给你一个可行的例子并解释它。 -
@Jules、array_merge 和 array_push 的工作方式不同。所以我认为这不是一个好主意。但是,根据您使用的语法,所有对都应使用两个 var 创建。作为(datum1,gegevens1),(datum2,gegevens2),...。如果其中之一与列列表不匹配;它会根据这里抛出一个错误:dev.mysql.com/doc/refman/5.6/en/insert.html,它说:“以下语句是非法的,因为列表中的值的数量与列名的数量不匹配:”对不起,我无法提供更多帮助,但是这个问题确实需要更多澄清。
标签: php mysql arrays pdo sql-insert