Выполнить MySQL INSERT Query несколько раз (вставить значения в несколько таблиц) - PullRequest
1 голос
/ 15 марта 2010

в основном у меня 3 таблицы; пользователи и проекты, тогда у меня есть «users_projects», чтобы разрешить формирование «один ко многим». Когда пользователь добавляет проект, мне нужно сохранить информацию о проекте, а затем «userid» и «projectid», хранящиеся в таблице usersprojects. Звучит так, как будто это просто, но у меня проблемы с синтаксисом, я думаю!?

В моем нынешнем виде в качестве запросов INSERT (значения входят в две разные таблицы):

$projectid = $_POST['projectid'];
    $pname = $_POST['pname'];
    $pdeadline = $_POST['pdeadline'];
    $pdetails = $_POST['pdetails'];

    $userid = $_POST['userid'];

$sql = "INSERT INTO projects (projectid, pname, pdeadline, pdetails) VALUES
   ('{$projectid}','{$pname}','{$pdeadline}','{$pdetails}')";


$sql =  "INSERT INTO users_projects (userid, projectid) VALUES
   ('{$userid}','{$projectid}')";

$result = mysql_query($sql, $connection)
    or die("MySQL Error: ".mysql_error());
header("Location: frontview.php");
exit();

Ответы [ 5 ]

1 голос
/ 15 марта 2010

Вы просто забыли выполнить sql между каждым запросом. Добавьте

 mysql_query($sql, $connection)
    or die("MySQL Error: ".mysql_error());

между каждым запросом, и вы должны быть в порядке.

b.t.w (1) всегда полезно тестировать с открытой консолью с tail -f в журнале sql (под /var/log/mysql/)
b.t.w. (2) У вас серьезные проблемы с безопасностью в вашем коде.
b.t.w (3) Вы можете рассмотреть возможность использования PDO / Mysqli, а не старого расширения mysql. b.t.w (4) Было бы проще в вашей жизни использовать какую-то обертку (хороший класс) для доступа к БД, а не делать это непосредственно везде в вашем коде.

0 голосов
/ 15 марта 2010

Вы, похоже, пытаетесь выполнить mysql_query() только один раз. У вас есть два запроса, поэтому его нужно использовать дважды, по одному разу на каждый запрос:

$sql = "INSERT INTO projects (projectid, projectname, projectdeadline, projectdetails) VALUES
   ('{$projectid}','{$projectname}','{$projectdeadline}','{$projectdetails}')";
$result = mysql_query($sql, $connection)
    or die("MySQL Error: ".mysql_error());

$sql =  "INSERT INTO usersprojects (userid, projectid) VALUES
   ('{$userid}','{$projectid}')";
$result = mysql_query($sql, $connection)
    or die("MySQL Error: ".mysql_error());

В качестве альтернативы, вы можете использовать mysqli_multi_query(), но это может потребовать значительного изменения кода для использования интерфейса mysqli.

0 голосов
/ 15 марта 2010
$projectid=mysql_insert_id($connection); 

Я вызвал это после моего первого запроса, он получит значение AutoIncrement из таблицы ваших проектов и сохранит его в $ projectid, затем второй запрос будет использовать его. поэтому после выполнения моего первого запроса я поместил вышеупомянутый код, ничего не меняя !!

0 голосов
/ 15 марта 2010

Возможно, я неправильно понимаю, но вы ставите заголовок ("Location: main.php"); посреди вас сценарий?

0 голосов
/ 15 марта 2010

Да, я бы проверил две вещи:

1) выполняются ли запросы? Как и другой упомянутый постер, выполняете ли вы SQL-запросы между установками SQL?

2) если вы печатаете / отлаживаете / отображаете каким-то образом вставляемые переменные, они заполняются? Если вы видите, что что-то вставлено, но некоторые данные пустые, то перед этим может что-то взорваться, и эти переменные будут пустыми.

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