Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Запрос дабавления в базу

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
orkanos
Отправлено: 07 Апреля, 2014 - 12:49:45
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Апр. 2014  


Помог: 0 раз(а)




есть запрос в базу на добавления строки INSERT INTO table (cal1,cal2) VALUES ('$val1', '$val2' )"); В этой же таблице есть поле id которое заполняется автоинкриментом.

суть в том что следующий запрос на добавления в другую таблицу должен записать и новосозданное id, но отловить у меня его не получается.. ни так: TestsDb::query("INSERT INTO table2 (version,id) VALUES ('$version1', 'SELECT MAX(id) FROM table1)'");

ни так:

$idA=mysqli_insert_id(); (в таком случае он передает 0. якобы не видит работы с аутоинкриментом)
 
 Top
LIME
Отправлено: 07 Апреля, 2014 - 13:12:20
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




автокоммит не сбрасывал в false ?
(Добавление)
сталкивался с подобным поведением по этой причине
можно обойти баг 'SELECT LAST_INSERT_ID() FROM tbl'
тем более где-то внутри mysqli_insert_id() это и происходит
 
 Top
ПТО
Отправлено: 07 Апреля, 2014 - 15:43:22
Post Id



Посетитель


Покинул форум
Сообщений всего: 395
Дата рег-ции: Янв. 2012  


Помог: 3 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. INSERT INTO TABLE (cal1, cal2) VALUES ('$val1', '$val2') RETURNING *

СУБД POSTGRE позволяет вернуть вставленную строчку )) Радость
 
 Top
orkanos
Отправлено: 07 Апреля, 2014 - 16:49:19
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Апр. 2014  


Помог: 0 раз(а)




Все гениальное просто)) Радость

(Отредактировано автором: 07 Апреля, 2014 - 16:49:31)

 
 Top
LIME
Отправлено: 07 Апреля, 2014 - 16:52:24
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




orkanos не уверен
нельзя ли пояснить
 
 Top
Lexus277
Отправлено: 30 Апреля, 2014 - 14:48:05
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Апр. 2014  


Помог: 0 раз(а)




Здравствуйте у меня другой вопрос , есть допустим обертка для PDO
тут все нормально , вызываем объект PDO в свойство класса. все ок.
с выборкой , удалением и обновлением записи все нормально , а вот добавление с опущеным AUTO_INCREMENT значением `uid` , ведет за собой дублированое добавление записи , тоесть 2 шт!!!! Не понял Не понял , но если я явно укажу значение `uid` то дублирования не произойдет и ошибки не будет , уверен что в самом скрипте нигде нет дублирование запроса, т.к вызовы единичны.
заметил что добавление второй записи (дубля) происходит когда скрипт заканчивает свое выполнение.
отмечу что у меня такая проблема только с PDO ( PDO::exec($sql) && PDO::query($sql) ) с msql_query(); такого небыло.
может AUTO_INCREMENT что-то барахлит или конфигурация таблицы или самой БД(MyIsam) ведет за собой подобное явление.?

CODE (php):
скопировать код в буфер обмена
  1. $table = 'jms_test_users';
  2. self::loadClass( 'xPDO' , $pdo );
  3.                
  4. $xpdo->Table_Insert_Row(array(
  5.         'table' => $table,
  6.         'set'   => array(
  7.                 'uid'           => null,
  8.                 'name'          =>'simple_name',
  9.                 'family'        =>'simple_family',
  10.                 'telephone'     =>'89-76-45',
  11.                 'location'      =>'New-Orlean',
  12.                 'policy_group'  =>'Members'
  13.         )
  14. ));
  15.                
  16. $result = $xpdo->Table_Get_Collection(array(
  17.           'table'       => $table
  18. ));
  19. echo xPDO::GetResultHtml($result);

код Table_Insert_Row( array $params=array() )
PHP:
скопировать код в буфер обмена
  1. public function Table_Insert_Row(array $params = array() ){
  2.         if(!is_array($params['set']) || empty($params['table']) )
  3.          throw new Exception('Не указаны главные параметры');
  4.         self::inputFilter( $params['table'] );
  5.         $sql = 'INSERT INTO '.$params['table'].' SET '.self::getKeyValueSql( $params['set'] ) . ';';
  6.        
  7.         $data = $this->pdo->exec($sql);
  8.                
  9.         return $data;
  10. }

$this->pdo->exec($sql); всегда возвращает int(1) кол-во затронутых строк. тоесть все ок. и в то-же время труднее т.к отловить проблему счетчиком не удастся. счетчик проблему не на заметит , но вот записи то все-равно две! Дублируются , помогите разобраться.
(Добавление)
Нашел проблему, она заключается не в PDO а в .htaccess
были такие строки
CODE (htmlphp):
скопировать код в буфер обмена
  1. RewriteEngine on
  2.  RewriteBase /
  3.  RewriteCond %{SCRIPT_FILENAME} !-f
  4.  RewriteCond %{SCRIPT_FILENAME} !-d
  5.  RewriteRule ^.*$ index.php [L]

этот код генерил, повторную загрузку страницы.... тоесть нужно поправить код чтобы страница не генерерировалась дублем тем самым не дублировала сценарий на ней..
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB