Использовать подготовленный оператор MySQLi для ввода в базу данных нескольких строк? - PullRequest
0 голосов
/ 30 марта 2012

Я создал HTML-форму, где пользователи будут указывать свое имя, адрес электронной почты и языковые навыки. Поскольку пользователь может говорить на нескольких языках, он сможет создавать дополнительные строки, нажав кнопку «Добавить».

Форма будет отправлена ​​и введена в базу данных MySQL. Я использую две таблицы для хранения полученных данных, тогда как идентификатор пользователя в первой таблице будет auto_incremented:

| (user-id) | name | email|
| user-id | language | proficiency|

Теперь я пытаюсь написать код PHP, который выглядит примерно так:

$name = $_POST['name'];
$email = $_POST['email'];

$add_table1 = $mysqli->prepare("INSERT INTO table1 (name, email) VALUES (?, ?)");
$add_table2 = $mysqli->prepare("INSERT INTO table2 (user_id, language, proficiency) VALUES (?, ?, ?)");

$add_table1->bind_param("ss", $name, $email);
$add_table1->execute();
$user-id = $mysqli->insert_id;

foreach($_POST['language'] as $index => $language) {
    $index = intval($index);
    $language = mysql_real_escape_string($language);
    $proficiency = mysql_real_escape_string($_POST['proficiency'][$index]);
    $add_table2->bind_param("iss", $user-id, $language, $proficiency);
    $add_table2->execute();
}
$add_table1->close();
$add_table2->close();
$mysqli->close();

Таблица должна выглядеть следующим образом

| 1 | Mark | mark@me.com |
| 2 | Sue  | sue@me.net |

|1 | English | perfect |
|1 | Spanish | awesome |
|2 | English | great |
|2 | French | ok |
|2 | Korean | fluent |

Тем не менее, с моим кодом таблица 1 выглядит нормально, а таблица 2 выглядит так

| 1 |  |  |
| 2 |  |  |

Может кто-нибудь помочь? Спасибо!

Ответы [ 2 ]

2 голосов
/ 30 марта 2012

Следует отметить, что вы не используете mysql_real_escape_string с подготовленными утверждениями.

Другое дело, что $user-id не является допустимым именем переменной. Вы не можете использовать дефис.

Edit:

Хорошо включить отчет об ошибках и вывести mysqli / mysqli_stmt::$error, когда что-то не получается. С их помощью можно решить большинство проблем.

1 голос
/ 30 марта 2012

Ваш PHP-код mysqli выглядит довольно хорошо. Вы уверены, что правильно получаете значения POST? в цикле foreach перед выполнением запросов выведите $ language и $ proficility

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