|
|
|
| Здравствуйте.
Проблема с добавлением записи в базу.
Одно из полей записи типа datetime.
Если добавлять запись со значением поля равным
$date_show = "2010-01-01 00:00:00"; то возникает ошибка синтаксиса.
Если значение поля сформировать таким образом:
$date_show = "NOW() + INTERVAL 3 YEAR"; - запись успешно добавляется.
При том, что первый способ успешно работал.... А сейчас поломался.
В чём может быть проблема. Разве "2010-01-01 00:00:00"; - некорректное значение для поля datetime?
Спасибо. | |
|
|
|
|
|
|
|
для: Хулиган
(27.04.2007 в 20:46)
| | А как сообщение об ошибке выглядит? | |
|
|
|
|
|
|
|
для: cheops
(28.04.2007 в 00:14)
| | Ошибка выглядит так:
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 '00:00:00, NOW() + INTERVAL 14 DAY, 'prod', 'Продаю', 'wet', '-', '24365', '2345'' at line 1
Вот код который добавляет запись в БД:
// try to add new
if ( isset($_GET['add']) && $_GET['add']=="1" ){
$category = $_POST['addcat']; $category_ru = get_ru($category);
$action = $_POST['addaction']; $action_ru = get_ru($action);
$raion = $_POST['addraion']; $raion_ru = get_ru($raion);
$date_add = "NOW()";
$date_ex = "NOW() + INTERVAL " .$_POST['addperiod']. " DAY";
$content = $_POST['area'];
$price = $_POST['addprice'];
$fone = $_POST['addfone'];
$name = $_POST['addname'];
$type = $_POST['addtype'];
if ($type=="controwblack" || strlen($content)>300) $date_show = "2010-01-01 00:00:00";
//if ($type=="controwblack" || strlen($content)>300) $date_show = "NOW() + INTERVAL 3 YEAR";
else $date_show = "NOW()";
$sql_str = "INSERT INTO `premises` VALUES (0,";
$sql_str.= " '$category',";
$sql_str.= " '$category_ru',";
$sql_str.= " $date_add,";
$sql_str.= " $date_show,";
$sql_str.= " $date_ex,";
$sql_str.= " '$action',";
$sql_str.= " '$action_ru',";
$sql_str.= " '$content',";
$sql_str.= " '$price',";
$sql_str.= " '$fone',";
$sql_str.= " '$name',";
$sql_str.= " '$raion',";
$sql_str.= " '$raion_ru',";
$sql_str.= " '$type')";
$link = open_db();
mysql_query("SET NAMES 'cp1251'");
$result = mysql_query($sql_str);
if ( $result == "1" ) { //added successfully
if ($date_show == "2020-01-01 00:00:00"){
Header("Location: /premadd.php?pay=1");
}
else{
Header("Location: /prem.php?r=all");
}
}
else { //addition failed
print mysql_error();
Header("Location: /premadd.php?f=1");
}
close_db($link);
exit;
}
|
| |
|
|
|
|
|
|
|
для: Хулиган
(28.04.2007 в 01:51)
| | Вы пытаетесь подставить в строке $date_show = "2010-01-01 00:00:00"; значение времени, не ограничив его апострофами. Пишите $date_show = "'2010-01-01 00:00:00'"; | |
|
|
|
|
|
|
|
для: Trianon
(28.04.2007 в 10:49)
| | Спасибо. С апострофами работает.
Интересно, почему раньше, 3 месяца назад, без апострофов работало? Этот модуль я отладил полностью и забыл про него т.к. он работал безотказно, а вот сейчас пришлось к нему вернуться. Странно... | |
|
|
|
|
|
|
|
для: Хулиган
(28.04.2007 в 14:22)
| | может быть скрипт никогда не следовал этой ветви условия? | |
|
|
|
|
|
|
|
для: Trianon
(28.04.2007 в 16:14)
| | скрипт проверялся принудительным прогоном по всем веткам условий.
Мне кажется, это скорее связано с той чрезмерной вольностью, которую позвляет себе php при работе с переменными, например, когда имя переменной можно прямо в строку запихать, а вместо имени затем подставится значение переменной. После с/с++ это как-то диковато выглядит... Видимо и работает также :) | |
|
|
|
|
|
|
|
для: Хулиган
(28.04.2007 в 21:00)
| | На самом деле к тому, как выглядит, быстро привыкаешь.
В php есть дикие (неортогональные) места, в т.ч. и при подстановке переменных в строки, но от содержимого переменных процесс никак не зависит. Скорее от вида имен.
Могу посоветовать быть крайне осторожным с операцией запятая и условной операцией.
Первая почти нигде не работает, вторая имеет совершенно непривычную после C/C++ ассоциативность, к тому же абсолютно неудобную.
Возвращаясь к теме: не могли там апострофы взяться ниоткуда.... что-то Вы недоглядели при тестировании... | |
|
|
|
|
|
|
|
для: Trianon
(28.04.2007 в 21:09)
| | Ясно, в общем, спасибо за помощь. | |
|
|
|