Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: вставка в SQL: Incorrect integer value: ' ' for column 'tovid' at row 1
 
 автор: denko   (26.05.2008 в 11:14)   письмо автору
 
 

Подскажите где ошибка:

<?php
session_start
();
  
// Устанавливаем соединение с базой данных
  
require_once("config.php");
  
$zt$_SESSION['oarr'];
  
$eme=$_SESSION['eme'];
// Создаем оператор INSERT
  
$sqlst "INSERT INTO orders  (orderid,tovid, idzakk,kolo,suma,dataz,status) 
                VALUES
               (null,' 
$ztt ','$id',' $ztk ','$s',null,0) ";
 
// Выполняем оператор UPDATE
  
$sqlo="UPDATE tovar
         SET kol=(kol-
$ztk)
         WHERE tovid=
$ztt";
  
$qwer="SELECT idzakk
                 FROM zakazchik
                 WHERE eme = '
$eme'  " ;
$rez mysql_query($qwer);
 if(!
$rez)exit(mysql_error()); 
while(
$row mysql_fetch_array($rez))
$id=$row['idzakk'];
for (
$i=0$i<count($zt); $i++)
{
$ztt=$zt[$i][0];
settype($ztt,"int");
$ztk=$zt[$i][1];
$s=6;
if( 
mysql_query($sqlst))
{
echo 
"запись добавлена";
}else exit(
"ошибка-" .mysql_error());
};
?>


Ошибка:
ошибка-Incorrect integer value: ' ' for column 'tovid' at row 1

   
 
 автор: cheops   (26.05.2008 в 17:34)   письмо автору
 
   для: denko   (26.05.2008 в 11:14)
 

Попробуйте заменить блок SQL-операторов следующим образом
<?php
  
// Создаем оператор INSERT 
  
$sqlst "INSERT INTO orders  (orderid,tovid, idzakk,kolo,suma,dataz,status)  
                VALUES 
               (null,' '
$ztt' ','$id',' $ztk ','$s',null,0) "
  
// Выполняем оператор UPDATE 
  
$sqlo="UPDATE tovar 
         SET kol=(kol-
$ztk
         WHERE tovid='
$ztt'"
  
$qwer="SELECT idzakk 
                 FROM zakazchik 
                 WHERE eme = '
$eme'  " ;
?>

   
 
 автор: denko   (27.05.2008 в 08:50)   письмо автору
 
   для: cheops   (26.05.2008 в 17:34)
 

Всё равно ругается

ошибка-Incorrect integer value: ' ' ' for column 'tovid' at row 1

   
 
 автор: sim5   (27.05.2008 в 09:35)   письмо автору
 
   для: denko   (27.05.2008 в 08:50)
 

Если tovid это INT и $ztt точно является числом, то кавычки вообще можно выбросить. Ошибка в передаваемых в запрос данных видимо.

   
 
 автор: denko   (27.05.2008 в 10:13)   письмо автору
 
   для: sim5   (27.05.2008 в 09:35)
 

для проверки исправляю код

<?php
session_start
();
  
// Устанавливаем соединение с базой данных
  
require_once("config.php");
  
$zt$_SESSION['oarr'];
  
$eme=$_SESSION['eme'];
// Создаем оператор INSERT
  
$sqlst "INSERT INTO orders  (orderid,tovid, idzakk,kolo,suma,dataz,status) 
                VALUES
               (null, '  '
$ztt'  ',5,3,3,null,0) ";
 
// Выполняем оператор UPDATE
  
$sqlo="UPDATE tovar
         SET kol=(kol-
$ztk)
         WHERE tovid=
$ztt";
  
$qwer="SELECT idzakk
                 FROM zakazchik
                 WHERE eme = '
$eme'  " ;
$rez mysql_query($qwer);
 if(!
$rez)exit(mysql_error()); 
while(
$row mysql_fetch_array($rez))
$id=$row['idzakk'];

for (
$i=0$i<count($zt); $i++)
{
$ztt=$zt[$i][0];
settype($ztt,int);
echo 
gettype($ztt);

};
?>

и получаю:
integerinteger
tovid тоже integer

   
 
 автор: sim5   (27.05.2008 в 10:43)   письмо автору
 
   для: denko   (27.05.2008 в 10:13)
 

Ошибка извещает о конфликте для поля tovid, а в него, следуя вашему запросу, передается $ztt, которая так и осталась обрамленной парами кавычек, а изменили вы совсем другие данные. Сделайте элементраный echo $ztt, перед помещением его в базу, уж покрайней мере можно будет понять, верны ли передаваемые данные в поле.

   
 
 автор: denko   (27.05.2008 в 11:11)   письмо автору
 
   для: sim5   (27.05.2008 в 10:43)
 

Убираю в запросе кавычки:

<?php
session_start
();
  
// Устанавливаем соединение с базой данных
  
require_once("config.php");
  
$zt$_SESSION['oarr'];
  
$eme=$_SESSION['eme'];
// Создаем оператор INSERT
  
$sqlst "INSERT INTO orders  (orderid,tovid, idzakk,kolo,suma,dataz,status) 
                VALUES
               (null, 
$ztt,5,3,3,null,0) ";
 
// Выполняем оператор UPDATE
  
$sqlo="UPDATE tovar
         SET kol=(kol-
$ztk)
         WHERE tovid=
$ztt";
  
$qwer="SELECT idzakk
                 FROM zakazchik
                 WHERE eme = '
$eme'  " ;
$rez mysql_query($qwer);
 if(!
$rez)exit(mysql_error()); 
while(
$row mysql_fetch_array($rez))
$id=$row['idzakk'];

for (
$i=0$i<count($zt); $i++)
{
$ztt=$zt[$i][0];
settype($ztt,int);
$ztk=$zt[$i][1];
$s=6;
if( 
mysql_query($sqlst))
{
echo 
"запись добавлена";
}else exit(
"ошибка-" .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 '5,3,3,null,0)' at line 3

Проверяю значение $ztt

<?php
session_start
();
  
// Устанавливаем соединение с базой данных
  
require_once("config.php");
  
$zt$_SESSION['oarr'];
  
$eme=$_SESSION['eme'];
// Создаем оператор INSERT
  
$sqlst "INSERT INTO orders  (orderid,tovid, idzakk,kolo,suma,dataz,status) 
                VALUES
               (null, 
$ztt,5,3,3,null,0) ";
 
// Выполняем оператор UPDATE
  
$sqlo="UPDATE tovar
         SET kol=(kol-
$ztk)
         WHERE tovid=
$ztt";
  
$qwer="SELECT idzakk
                 FROM zakazchik
                 WHERE eme = '
$eme'  " ;
$rez mysql_query($qwer);
 if(!
$rez)exit(mysql_error()); 
while(
$row mysql_fetch_array($rez))
$id=$row['idzakk'];

for (
$i=0$i<count($zt); $i++)
{
$ztt=$zt[$i][0];
settype($ztt,int);
$ztk=$zt[$i][1];
$s=6;
echo 
$ztt;
}
?>

Результат:
15

   
 
 автор: sim5   (27.05.2008 в 11:48)   письмо автору
 
   для: denko   (27.05.2008 в 11:11)
 

В общем так, если у вас все поля (кроме dataz, которое имеет тип DATE), то такой запрос:
mysql_query("INSERT INTO tst (tovid, idzakk, kolo, suma, dataz, status) VALUES (5, 5, 3, 3, null, 0);") or die (mysql_error()); (если orderid поле с автоинкрементом, то упоминать его в запросе не обязательно), тогда вы получите лишь такую ошибку:

Column 'dataz' cannot be null

Сменив, например, null на date(), такую:

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 '), 0)' at line 1

И лишь прописав в запросе 'date()', у вас произойдет запись в таблицу. Если поле dataz это имеет тоже тип INT, то все должно записаться без проблем. Разберитесь вы со своими полями и данными.

   
 
 автор: denko   (27.05.2008 в 12:29)   письмо автору
 
   для: sim5   (27.05.2008 в 11:48)
 

поле dataz которое имеет тип TIMESTAMP, то есть его можно не указывать.
поле orderid -- поле с автоинкрементом, то есть его тоже можно не указывать.
Изначально так и было, результат был тот же.
Сейчас я ипользую их в запросе лишь потому, что не понимаю почему не работает.

   
 
 автор: sim5   (27.05.2008 в 12:33)   письмо автору
 
   для: denko   (27.05.2008 в 12:29)
 

Я не все сказал, то как я привел запись в поле типа dataz, если оно имеет тип DАTE, это всего лишь "обманка", записи даты не будет в поле. Что за типы у остальных полей?

   
 
 автор: denko   (27.05.2008 в 12:50)   письмо автору
 
   для: sim5   (27.05.2008 в 12:33)
 

вот структура таблицы

CREATE TABLE IF NOT EXISTS `orders` (
  `orderid` int(6) NOT NULL AUTO_INCREMENT,
  `tovid` int(10) unsigned zerofill NOT NULL,
  `idzakk` int(6) NOT NULL,
  `kolo` int(6) NOT NULL,
  `suma` decimal(10,2) NOT NULL,
  `dataz` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `data` date DEFAULT NULL,
  `dataop` date DEFAULT NULL,
  `status` smallint(11) DEFAULT '0',
  PRIMARY KEY (`orderid`),
  KEY `tovid` (`tovid`,`idzakk`,`status`),
  KEY `idzakk` (`idzakk`)
) ENGINE=InnoDB  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=27 ;

--
-- Ограничения внешнего ключа сохраненных таблиц
--

--
-- Ограничения внешнего ключа таблицы `orders`
--
ALTER TABLE `orders`
  ADD CONSTRAINT `orders_ibfk_3` FOREIGN KEY (`tovid`) REFERENCES `tovar` (`tovid`),
  ADD CONSTRAINT `orders_ibfk_4` FOREIGN KEY (`idzakk`) REFERENCES `zakazchik` (`idzakk`);

причём если я явно указываю:

  $sqlst = "INSERT INTO orders  (tovid, idzakk,kolo,suma,dataz,status) 
                VALUES
               (3,5,3,3,null,0) ";

всё работает

   
 
 автор: sim5   (27.05.2008 в 13:24)   письмо автору
 
   для: denko   (27.05.2008 в 12:50)
 

Создал (специльно для вас, только у меня тип таблиц MyISAM) вашу таблицу, это:

<?
$v1 
9;
$v2 17;
$v3 6;
$v4 9;
mysql_query("INSERT INTO orders  (tovid, idzakk,kolo,suma,dataz,status)  
                VALUES (
$v1,$v2,$v3,$v4,null,0);") or die (mysql_error());
?>

не вызывает никаких проблем. Выполните у себя такой запрос (отдельно, для теста).

   
 
 автор: denko   (27.05.2008 в 13:30)   письмо автору
 
   для: sim5   (27.05.2008 в 13:24)
 

Работает, спасибо:)
В чём же у меня проблема?

   
 
 автор: sim5   (27.05.2008 в 13:40)   письмо автору
 
   для: denko   (27.05.2008 в 13:30)
 

Работает отдельно тестом или и в самом скрипте теперь?

   
 
 автор: denko   (27.05.2008 в 13:54)   письмо автору
 
   для: sim5   (27.05.2008 в 13:40)
 

Отделно в виде тестового скрипта.

   
 
 автор: sim5   (27.05.2008 в 13:59)   письмо автору
 
   для: denko   (27.05.2008 в 13:54)
 

Значит тип передаваемых у вас в запрос данных, не совпадают с типом полей таблицы. Думаю, что проблема в этом. Заремируйте в своем скрипте все, начиная с запроса записи в таблицу, и вместо этого выведите на экран данные предназначенные для записи. Что у вас за значения в них?

   
 
 автор: denko   (27.05.2008 в 14:12)   письмо автору
 
   для: sim5   (27.05.2008 в 13:59)
 

Я пробовал, выводит коректные данные.
Проверял их тип -- INTEGER.
см. выше

   
 
 автор: sim5   (27.05.2008 в 14:35)   письмо автору
 
   для: denko   (27.05.2008 в 14:12)
 

Тогда я затрудняюсь сказать о причине, вы "глазами" гляньте на свои типы еще, ну причина остается только в них. Кстати, где у вас в коде непосредственно запрос к базе на запись?

   
 
 автор: denko   (27.05.2008 в 14:43)   письмо автору
 
   для: sim5   (27.05.2008 в 14:35)
 

Шестая строчка с конца

<?php
session_start
();
  
// Устанавливаем соединение с базой данных
  
require_once("config.php");
  
$zt$_SESSION['oarr'];
  
$eme=$_SESSION['eme'];
// Создаем оператор INSERT
  
$sqlst "INSERT INTO orders  (tovid, idzakk,kolo,suma,dataz,status) 
                VALUES
               (
$ztt,5,3,3,null,0) ";
for (
$i=0$i<count($zt); $i++)
{
$ztt=$zt[$i][0];
settype($ztt,int);
if( 
mysql_query($sqlst))
{
echo 
"запись добавлена";
}else exit(
"ошибка-" .mysql_error());
};
?>

   
 
 автор: sim5   (27.05.2008 в 15:02)   письмо автору
 
   для: denko   (27.05.2008 в 14:43)
 

Нет, ну просто слов нет, нука так напишите в своем тесте:

<?
$sqlst 
"INSERT INTO orders  (tovid, idzakk,kolo,suma,dataz,status)  
                VALUES ('
$v1','$v2','$v3','$v4',null,0)";
$v1 19;
$v2 34;
$v3 21;
$v4 125;
mysql_query($sqlst) or die (mysql_error());
?

Что у вас в таблицу запишет, как вы думаете?

   
 
 автор: denko   (27.05.2008 в 15:12)   письмо автору
 
   для: sim5   (27.05.2008 в 15:02)
 

Спасибо, супер:)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования