Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> mysqli не происходит INSERT в бд 
:(
    Опции темы
aleron
Дата 29.8.2012, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 24.8.2011

Репутация: нет
Всего: нет



Добрый день. Посмотрите пожалуста "незамыленным" взглядом, уже час мучаюсь - ничего не понимаю: не происходит инсёрт в бд безо всяких ошибок. запрос верный, напрямую в бд проходит, более того вынесенным в другой скрипт код отрабатывает нормально. errno - 0. а зщдесь не работает, может что с объектами mysqli накрутил или ошибка глупая логическая... все остальные запроссы выполняются корректно.
зы
неработающий запрос с 44-й строки
Код

<?php
$mysqli = new mysqli('localhost', '', '', 'university'); 
if (mysqli_connect_errno()) { 
    printf("error connect: %s\n", mysqli_connect_error()); 
    exit(); 
} 
//===========================================================================================
$first_name=$_POST['fname'];
$last_name=$_POST['lname'];
$birthday=$_POST['bdate'];
$email=$_POST['email'];
$group_id=$_POST['groupid'];

$regdate=time();
$ip=$_SERVER['REMOTE_ADDR'];
$ip=iptoint($ip);
$instructor=mt_rand(0,1);

$mysqli->autocommit(FALSE);
$stmt = $mysqli->prepare("INSERT INTO students(first_name,last_name,group_id,birthday_date,email,registration_date,ip_address,instructor) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"); 
$stmt->bind_param('ssissiii', $first_name, $last_name, $group_id, $birthday, $email, $regdate, $ip, $instructor); 
$stmt->execute(); 
$stmt->close();

$stmt2= $mysqli->prepare("SELECT MAX(id) FROM students");
$stmt2->execute();
$stmt2->bind_result($max_id);
while($stmt2->fetch()){
}
$stmt2->close();
$mysqli->commit();


$stmt3= $mysqli->prepare("SELECT subject_id FROM group_subject WHERE group_id=?");
$stmt3->bind_param('i', $group_id); 
$stmt3->execute();
$stmt3->bind_result($subject_id);
$sub_id=array();
while($stmt3->fetch()){
   $sub_id[]=$subject_id;  
}
$stmt3->close();

   foreach ($sub_id as $val) {
      $score=mt_rand(1,5);
      $stmt4 = $mysqli->prepare("INSERT INTO scores(student_id,subject_id,score) VALUES (?, ?, ?)"); // НЕРАБОТАЮЩИЙ ИНСЁРТ!
      $stmt4->bind_param('iii', $max_id, $val, $score); 
      $stmt4->execute(); 
      $stmt4->close();

       echo "$val  - $max_id - $score - $mysqli->errno <br>";
     }
  


     
//header('Location: http://test1.ru/');
$mysqli->close(); 

//===========================================================================================
function iptoint($ip) {
   $nip = ip2long($ip);
   $nip = sprintf("%u", ip2long($nip));
   return $nip;
}
exit();


Это сообщение отредактировал(а) aleron - 29.8.2012, 17:12
PM MAIL   Вверх
Fortop
Дата 29.8.2012, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 3
Всего: 42



$stmt4->execute();

Что возвращает?

Добавлено через 16 секунд
Что тут лежит?

http://ua.php.net/manual/en/mysqli-stmt.error.php

Добавлено через 44 секунды
Собственно покажите нам над чем и как вы целый час мучались.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
aleron
Дата 29.8.2012, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 24.8.2011

Репутация: нет
Всего: нет



над тем, что 
Код

$stmt4 = $mysqli->prepare("INSERT INTO scores(student_id,subject_id,score) VALUES (?, ?, ?)"); // НЕРАБОТАЮЩИЙ ИНСЁРТ!
      $stmt4->bind_param('iii', $max_id, $val, $score); 
      $stmt4->execute(); 
      $stmt4->close();

корректно работает, будучи вынесенной в отдельный скрипт и даже(!) в начало этого скрипта, перед всеми другими запросами... дело не в скьюэле , но в чём, мне непонятно...
зы
в stmt error 
Warning: main() [function.main]: Couldn't fetch mysqli_stmt in Z:\home\test1.ru\www\upload.php on line 51

зыы
впервые использую mysqli и подготовленные выражения, поэтому плаваю...

во всех этих подставляемых переменных $max_id, $val, $score содержатся корректные интеджеры. может дело в том, что подставляемые переменные недьзя формировать "на лету"?

Это сообщение отредактировал(а) aleron - 29.8.2012, 20:19
PM MAIL   Вверх
Fortop
Дата 29.8.2012, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 3
Всего: 42



Проверьте статусы после каждой операции

bind_param
execute
close

Ну и в случае отличного от true выведите ошибку

Добавлено через 1 минуту и 28 секунд
Ну и да.
Судя по всему у вас не отфетчилось $max_id

вероятно отсюда и проблемы.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
aleron
Дата 30.8.2012, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 24.8.2011

Репутация: нет
Всего: нет



в общем  фетчилось всё, не работало из-за попытки первые два запроса выполнить в транзакции - почему не знаю...

$mysqli->autocommit(FALSE);
запросы
$mysqli->commit();
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0429 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.