как отправить данные в mysqli с индексом (подготовленный оператор) - PullRequest
0 голосов
/ 29 марта 2019

Я создаю массив из динамически созданных полей ввода и затем отправляю массив в 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();
}

Итак, я хотел бы создать следующее: создать один цикл foreach для моей переменной $example и на основе порядковых номеров добавить данные из переменной example_costs и вставить их в базу данных. Вам не нужно беспокоиться о том, существует ли значение индекса в моей переменной example_costs, так как они "пары".

Я знаю, что проблема в том, что я не могу связать свою переменную так:

$example_costs[$index]

Итак, теперь мой вопрос: как я могу связать свою переменную, как указано выше? Но каким-то образом php принимает? Или мне нужно создать 2 цикла foreach? -> То, что я предпочел бы не делать.

1 Ответ

1 голос
/ 29 марта 2019

Вы не указали, что именно вы подразумеваете под «не работает» (то есть вы не описали, что происходит неправильно или какое поведение вы видите), но вот что я могу наблюдать только из кода:

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 - присвоение переменной ее собственного значения являетсясамо определение бессмысленно).

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