如何使用索引号将数据发送到mysqli(准备好的语句)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用索引号将数据发送到mysqli(准备好的语句)相关的知识,希望对你有一定的参考价值。

我正在从动态创建的输入字段创建一个数组,然后将数组发送到php,在php中我创建了一个foreach循环并尝试将其插入到我的数据库中。

我为我的数组创建了一个foreach循环,并在我的数据库中插入这样的值,但我的问题是:你不能将带索引号的变量绑定到查询字符串。我已经验证它是否实际上是我发送的数组,答案是:是的。这是一个数组。

$stmt = $conn->prepare('INSERT INTO vv(event_id, vvType, vvCosting) VALUES (?, ?, ?)');
foreach ($example as $index => $value) {
    $stmt->bind_param('iss', $id, $example, $example_costs);

    $id = $id;
    $example = $value;
    $example_costs = example_costs[$index]; //this DOES NOT work
    $stmt->execute();
}

所以我想要的是:为我的$example变量创建一个foreach循环,并根据索引号,它还插入变量example_costs中的数据,并将其插入数据库中。您不应该担心我的example_costs变量中的索引值是否存在,因为它们是“对”。

我知道问题是我不能像这样绑定我的变量:

$example_costs[$index]

所以现在我的问题是:如何像上面那样绑定我的变量?但在某种程度上php会接受吗?或者我需要创建2个foreach循环? - >我宁愿做的事。

答案

你没有具体说明你的意思是“不工作”(即你没有描述出现了什么问题或者你看到的是什么行为),但这是我从代码中可以看到的:

1)你有(似乎是)一个错字:我希望example_costs[$index];真的应该是$example_costs[$index];

2)假设1是固定的,你还要覆盖变量$example$example_costs的值,这些是你试图循环的变量,而循环仍在继续。显然,这将破坏原始数组,并使它们无法在下次尝试循环时重复使用。

在这种情况下,作为良好编码实践的一般要点,不要重复使用变量名来代表代码中的两个不同的东西 - 特别是当你仍然在使用它们的原始目的时!

实际上,无论如何你都不需要在bind语句中使用这些单独的变量。这应该做的工作:

$stmt = $conn->prepare('INSERT INTO vv(event_id, vvType, vvCosting) VALUES (?, ?, ?)');
foreach ($example as $index => $value) {
    $stmt->bind_param('iss', $id, $value, $example_costs[$index]);
    $stmt->execute();
}

其余的要么不正确(例如覆盖$example数组)要么冗余(例如$id = $id) - 分配变量它自己的值就是无意义的定义。

以上是关于如何使用索引号将数据发送到mysqli(准备好的语句)的主要内容,如果未能解决你的问题,请参考以下文章

如何查看准备好的语句的内容?

如何在mysqli准备好的语句中使用SQL LIKE子句[重复]

如何使用mysqli准备好的语句?

如何在 MySQLI 中使用准备好的语句?

bind_result 成数组 PHP mysqli 准备好的语句

带双引号的 PHP/SQL 准备语句