Помощник
|
Заполнение БД с внешними ключами через форму |
Ledy
|
Сообщение
#1
|
||
|
|
||
|
|||
BigBoy_hb |
9.7.2011, 16:33;
Ответить: BigBoy_hb
Сообщение
#2
|
|
[PHP]mysql_query ("INSERT INTO author
SELECT 0, '".$_POST['field_author'"]."', id FROM city WHERE city = '".$_POST['field_city']."'");[/PHP] |
|
|
Ledy
|
Сообщение
#3
|
|
а первое значение 0 для id_author? у меня просто стоит auto-increment для поля id_author. или это что-то другое?
|
|
|
Ledy
|
Сообщение
#4
|
|
предложенный работает, если убрать "0" и перечислить поля, которые необходимо заполнять. Ключевое поле заполняется автоматически.
А если делать несколько дочерних таблиц, то запрос такой: [PHP]$result = mysql_query ("INSERT INTO author (login, name_author, id_city, id_org, id_email, id_degree) SELECT '".$_POST['fild_login']."', '".$_POST['fild_author']."', city.id, organization.id, email.id, degree.id FROM city, organization, email, degree WHERE city.city = '".$_POST['fild_city']."' and organization.org = '".$_POST['fild_org']."' and email.email = '".$_POST['fild_email']."' and degree.degree = '".$_POST['fild_degree']."'");[/PHP] |
|
|
Mulder_hb |
10.7.2011, 15:46;
Ответить: Mulder_hb
Сообщение
#5
|
|
[PHP]<?php
$city = htmlspecialchars(trim($_POST['fild_city'])); $author = htmlspecialchars(trim($_POST['fild_author'])); $conn = mysql_connect('localhost', 'root') or die(mysql_error()); mysql_select_db("mybd", $conn) or die(mysql_error()); $result = mysql_query("INSERT INTO `city` (`city`) VALUES ('" . mysql_real_escape_string($city) . "')"); $cityId = mysql_insert_id(); if (!$cityId) { // запись уже существует $result = mysql_query("SELECT `id` FROM `city` WHERE `city` = '" . mysql_real_escape_string($city) . "'"); $cityId = (int) mysql_result($result, 0); } $result = mysql_query("INSERT INTO `author` (`name`,`id_city`) VALUES ('" . mysql_real_escape_string($city) . "', $cityId)"); if (!$result) { die('Что-то пошло не так...'); } mysql_close();[/PHP] Или так: [PHP]<?php $city = htmlspecialchars(trim($_POST['fild_city'])); $author = htmlspecialchars(trim($_POST['fild_author'])); $conn = new mysqli('localhost', 'root', '', 'mybd'); if (mysqli_connect_errno()) { die('Ошибка соединения: ' . mysqli_connect_error()); } $stmt = $conn->prepare("INSERT INTO city (city) VALUES (?)"); $stmt->bind_param('s', $city); $stmt->execute(); if (!$stmt->affected_rows) { //запись уже существует $stmt = $conn->prepare("INSERT INTO author (name,id_city) VALUES (?, (SELECT id FROM city WHERE city = ?))"); if (!$stmt) { die('Что-то пошло не так...'); } $stmt->bind_param('ss', $author, $city); $stmt->execute(); $stmt->close(); } else { $cityId = $stmt->insert_id; $stmt = $conn->prepare("INSERT INTO author (name,id_city) VALUES (?, ?)"); if (!$stmt) { die('Что-то пошло не так...'); } $stmt->bind_param('ss', $author, $cityId); $stmt->execute(); $stmt->close(); } $conn->close();[/PHP] |
|
|
BigBoy_hb |
11.7.2011, 1:57;
Ответить: BigBoy_hb
Сообщение
#6
|
|
а зачем столько лишнего кода на php? не проще это все сделать путём sql? ибо так вы получается лишний раз "грузите" субд
как по мне проще написать хранимую процедуру и пусть она сама там всё делает |
|
|
Mulder_hb |
11.7.2011, 10:48;
Ответить: Mulder_hb
Сообщение
#7
|
|
а зачем столько лишнего кода на php? Весь этот "лишний", как вы выразились, код призван защитить сайт от прыщявых хацкеров. Данные перед вставкой в бд нужно обрабатывать. как по мне проще написать хранимую процедуру и пусть она сама там всё делает Хранимая процедура не обладает гибкостью и расширяемостью. |
|
|
Ledy
|
Сообщение
#8
|
|
|
|
|
Mulder_hb |
12.7.2011, 12:17;
Ответить: Mulder_hb
Сообщение
#9
|
|
|
|
|
Ledy
|
Сообщение
#10
|
|
да синтаксис вроде правильный.
а вот как сделать чтобы при записи данных в таблице Города не создавались дубликаты? Insert ignore и Replace выдает ошибку (когда указано что поле city - название города - уникальное). Пробовала ничего не добавлять в таблицу-справочник Города, а просто сравнивать значение из формы fild_city с полем city таблицы Города, но тогда в таблицу Авторы тоже ничего не добавляется |
|
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
Bropush - Твой бро в монетизации через Push-уведомления | 31 | bropush | 11884 | Сегодня, 13:00 автор: bropush |
|
Если в сайт с одними ключами, которые там долго, добавить новую рубрику с новыми ключами | 2 | Tutich | 1333 | 16.4.2024, 8:27 автор: Tutich |
|
Через какой браузер и как можно найти в кэшэ браузера видео | 10 | Room | 2390 | 23.3.2024, 7:41 автор: Room |
|
Продвижение сайта через краудинг с поддержкой Полный комплекс мер по продвижению сайта |
0 | alexey | 1016 | 22.8.2023, 16:33 автор: alexey |
|
Куплю группы ВК - только через гаранта | 1 | robot_yaga2 | 882 | 30.5.2023, 16:51 автор: GlazAlmaz |
Текстовая версия | Сейчас: 25.4.2024, 13:12 |