|
|
|
| привет, делаю запись в базу
<?php
if(isset($_GET['add'])) { //если Add существует
// вот тут нужно передать id добавляемой записи
// но как ее передать если запись еще не добавлена?
if ($_POST['title'] == "") { $title = "АЙДИ добавляемой записи"; } else { $title = $_POST['title']; }
$content = $_POST['content'];
mysql_query("INSERT INTO news (title, content) VALUES('$title', '$content')") or die(mysql_error());
// $curentid = mysql_insert_id();
mysql_close();
}
?>
|
не могу передать ID добавляемой записи в условие выше :( неужели придется для получения ID открывать таблицу и считать ? | |
|
|
|
|
|
|
|
для: tima2010
(01.09.2011 в 22:00)
| | в большинстве случаев id строке присваивает сама база автоинкрементом
(не смотря на видимую простоту это достаточно мощная функция и не стоит просто так от нее отказыватся)
в вашем случае я тоже не вижу причин для исключения | |
|
|
|
|
|
|
|
для: Valick
(01.09.2011 в 22:04)
| | да ID присваивается само вот sql:
mysql_query("
CREATE TABLE IF NOT EXISTS news (
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
title VARCHAR(255),
content TEXT
) ENGINE=MyISAM CHARACTER SET=utf8;
")
|
проблема в том чтобы при пустом значении title задавать ID записи чтобы оно не было пустым | |
|
|
|
|
|
|
|
для: tima2010
(01.09.2011 в 22:00)
| | Лучше постфактум обновить запись при помощи значения, полученного из mysql_insert_id() (я так понимаю для назначения ID используется механизм AUTO_INCREMENT?).
<?php
if(isset($_GET['add'])) { //если Add существует
$title = $_POST['title'];
$content = $_POST['content'];
$query = "INSERT INTO news (title, content) VALUES('$title', '$content')";
mysql_query($query) or die(mysql_error());
if ($_POST['title'] == "")
{
$id = mysql_insert_id();
$query = "UPDATE news SET title = $id WHERE ID = $id";
mysql_query($query) or die(mysql_error());
}
mysql_close();
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(01.09.2011 в 22:07)
| | Спасибо! все работает.
да именно AUTO_INCREMENT :)
А почему вы используете query через переменную, таким образом? :
$query = "INSERT INTO news (title, content) VALUES('$title', '$content')";
mysql_query($query) or die(mysql_error());
|
а не таким?
mysql_query("INSERT INTO news (title, content) VALUES('$title', '$content')") or die(mysql_error());
|
| |
|
|
|
|
|
|
|
для: tima2010
(01.09.2011 в 22:19)
| | потому что для отладки кода легко и просто можно сделать echo $query="....
и легко найти ошибку | |
|
|
|
|
|
|
|
для: Valick
(01.09.2011 в 22:22)
| | вообщем этика :) | |
|
|
|
|
|
|
|
для: tima2010
(01.09.2011 в 22:23)
| | а еще иногда запрос может быть достаточно сложным и собираться из нескольких частей $query .= $query....
в общем привыкайте использовать переменную, пригодится :) | |
|
|
|
|
|
|
|
для: Valick
(01.09.2011 в 22:24)
| | хм, понял вообщем чтобы не писать два раза
mysql_query("INSERT INTO.... ") or die(mysql_error());
mysql_query("INSERT INTO.... ") or die(mysql_error());
|
можно написать ?::
$query .= "INSERT INTO 1....";
$query .= "INSERT INTO 2....";
mysql_query($query) or die(mysql_error());
|
| |
|
|
|
|
|
|
|
для: tima2010
(01.09.2011 в 22:34)
| | ну в принципе да, но в данном случае лучше использовать многострочный INSERT
т.е в запросе собирать именно часть VALUES
$query="INSERT INTO `table` (pole1,pole2) VALUES";
$query .="(1,2),";
$query .="(3,4)";
|
иногда в сборке запроса принимают непосредственное участие циклы
и там конструкция $query .= как родная) | |
|
|
|
|
|
|
|
для: Valick
(01.09.2011 в 22:39)
| | а если нужно из разных таблиц? к примеру на такое сильно ругается:
$query .= "SELECT * FROM articles where (category='$id')";
$query .= "SELECT * FROM category where (id='$id')";
$res = mysql_query($query) or die(mysql_error());
|
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT * FROM category where (id='1')' at line 1 | |
|
|
|
|
|
|
|
для: tima2010
(02.09.2011 в 10:00)
| | так не нужно пихать невпихуемое))
id у вас число? или строка?
$query = "SELECT * FROM articles where category=$id";
$query .= ";";
$query .= "SELECT * FROM category where id=$id";
$res = mysql_query($query) or die(mysql_error());
|
только не нужно тут этого (хороша ложка к обеду)
здесь два никоим образом не связанных запроса и даже если вы их объедените
то они так и останутся двумя запросами...
__
я вам говорил о сборке одного достаточно сложного запроса, но даже если это
всего навсего SELECT * FROM `table`, то лично я буду все равно использовать переменную | |
|
|
|
|
|
|
|
для: Valick
(02.09.2011 в 10:18)
| | Понятно! :) Спасибо буду знать!
да id - число | |
|
|
|
|
|
|
|
для: tima2010
(01.09.2011 в 22:19)
| | В общем да, из-за отладки, когда у вас есть готовая переменная $query её очень просто вывести, причем, когда у вас ошибки собираются не блоками if(), а исключениями, это становится в двойне важно, так как процесс регистрации и вывода ошибки нужно регистрировать, а информации в mysql_error() зачастую недостаточно, особенно, если речь идет об огромном проекте. Да и в длину код становится короче, что важно для форума и книг. | |
|
|
|