Несколько подготовленных операторов в PHP с MySQLi

Я хочу сделать два подготовленных оператора, один сразу за другим в PHP с MySQLi. Я новичок в PHP и MySQLi, поэтому я не знаю, следует ли мне закрыть оператор, закрыть соединение с базой данных, поместить весь код в функцию или просто иметь код не внутри функции.

В основном я просто хочу вставить запись в одну таблицу, а затем вставить ту же запись в другую таблицу с помощью MySQLi.

Спасибо!


person David    schedule 09.03.2012    source источник


Ответы (2)


Непосредственно со страницы mysqli: http://php.net/manual/en/mysqli.commit.php

<?PHP
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
$mysqli->set_charset('utf8mb4');

/* set autocommit to off */
$mysqli->autocommit(FALSE);

/* Insert some values */
$mysqli->query("INSERT INTO table1 VALUES ('DEU', 'Bavarian', 'F', 11.2)");
$mysqli->query("INSERT INTO table2 VALUES ('DEU', 'Bavarian', 'F', 11.2)");

/* commit transaction */
$mysqli->commit();

/* close connection */
$mysqli->close();

* Редактировать с подготовленными операторами для «не вменяемых» действий:

<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("localhost", "root", "", "");
$mysqli->set_charset('utf8mb4');

/* set autocommit to off */
$mysqli->autocommit(FALSE);

$stmt1 = $mysqli->prepare("INSERT INTO tbl1 (id, intro) VALUES (?, ?)");
$stmt2 = $mysqli->prepare("INSERT INTO tbl2 (id, name) VALUES (?, ?)");

$str1 = 'abc';
$str2 = 'efg';
$str3 = 'hij';
$str4 = 'klm';

$stmt1->bind_param('ss', $str1, $str2);
$stmt2->bind_param('ss', $str3,$str4);

$stmt1->execute();
$stmt2->execute();

/* commit and set autocommit to on */
$mysqli->autocommit(true);
person RumpRanger    schedule 09.03.2012
comment
Я не вижу здесь готовых заявлений - person Your Common Sense; 10.03.2012
comment
да, я вижу, как это сделать без подготовленных заявлений, но я не знаю, как справиться с излишним количеством подготовленных заявлений, но в любом случае спасибо :) - person David; 10.03.2012

должен ли я закрыть заявление

No.

закрыть соединение с базой данных

No.

поместите весь код в функцию

Желательно, если вы имеете представление о том, что такое функции и как их использовать.

Кстати, вставлять одни и те же данные дважды не имеет смысла. Вы должны связывать данные, а не удваивать их.

person Your Common Sense    schedule 09.03.2012
comment
так что сразу после того, как я выполню свой первый подготовленный оператор, могу ли я приступить к подготовке и выполнению моего второго? - person David; 10.03.2012
comment
Нет. Я сказал выше, в этом нет смысла. Вы уже вставили свои данные, нет необходимости вставлять их снова - person Your Common Sense; 10.03.2012
comment
это не те же данные, поэтому мне нужно вставить их снова - person David; 10.03.2012
comment
Почему это не то же самое, если вам нужно вставить его снова? - person Your Common Sense; 10.03.2012
comment
я просто хочу сделать вставку после другой вставки - person David; 10.03.2012
comment
Почему бы и нет? Действие может потребовать вставки в две разные таблицы. - person RumpRanger; 10.03.2012
comment
Нет, никакие разумные действия не потребуют этого - person Your Common Sense; 10.03.2012
comment
Без провокации, как бы вы предложили обрабатывать форму, в которую можно вставить объект и его отношения, выбранные из множественного выбора? - person RumpRanger; 10.03.2012
comment
@CharlesWeiss как есть: вставьте сущность и ее связь, а НЕ сущность дважды - person Your Common Sense; 10.03.2012