Задача - написание сообщения, относящегося к многим темам. На форме чекбоксы В зависимости от их отметок, надо заполнить таблицу. sql формируется так: PHP: do { $topid = "topic".$row_topics['id']; if (isset($_POST[$topid])) { $PostSQL="INSERT INTO post_to_topic (post_id, topic_id, is_in) VALUES('".$Post_ID."','".$row_topics['id']."','1')"; mysql_select_db($database_oprbase, $oprbase); $Res = mysql_query($PostSQL, $oprbase) or die(mysql_error()); } } while ($row_topics = mysql_fetch_assoc($topics)); Причём, формируется правильно, т.е. если вместо PHP: mysql_select_db($database_oprbase, $oprbase); $Res = mysql_query($PostSQL, $oprbase) or die(mysql_error()); написать PHP: echo $PostSQL и потом этот запрос скормить hppmyadminу, он работает, а если оставлять так, то появляется "невозможно отобразить страницу". Приведённый вариант - уже второй. Сначала SQL формировался в цикле, а выполнялся уже после его завершения. Результат такойже.
keymaster 1. зачем в цикле select_db() достаточно "одной таблэтки" перед циклом. 2. поставь в цикл print('!'); flush() может просто зацикливается?
Поставил. Как и ожидалось, стали печататься воскл. знаки. Где? Если запрос не выполнять, то всё, кроме него, работает. Заработало в таком виде: PHP: do { $topid = "topic".$row_topics['id']; if (isset($_POST[$topid])) { $PostSQL = "INSERT INTO post_to_topic (post_id, topic_id, is_in) VALUES('".$Post_ID."','".$row_topics['id']."','1')"; $Res = mysql_query($PostSQL, $oprbase) or die(mysql_error()); print('!'); flush(); } } while ($row_topics = mysql_fetch_assoc($topics)); Но не будет ли такая конструкция сильно нагружать mysql?
ну.... цикл формирует запрос: изначально - $sql = ""; в каждой итерации происходит: $sql = $sql." insert into table(field) values(value); " если после цикла написать echo $sql, то будет примерно следующее: insert into table(field) values(value); insert into table(field) values(value); insert into table(field) values(value); insert into table(field) values(value); Если это скопировать и скормит PHPMYADMINу, то запрос успешно выполниться, а если сделать: mysql_select_db($database_oprbase, $oprbase); $Res = mysql_query($sql, $oprbase) or die(mysql_error()); то вылетает "невозможно отобразить страницу".
Привычка мешает. На работе win32 приложениями под mssql занят. И никогда так не делаем. Формируется большой запрос и одним махом отдаётся серверу.
Прочитал доку. Смирился. А оно снова не хочет работать. Загрузка файла. Файл грузиться окейно и надо инфу о нём в базу сунуть: PHP: $fileSQL = "INSERT INTO files (postid, filename) VALUES('".$Post_ID."','".$myfile_name."')"; mysql_select_db($database_oprbase, $oprbase); $Res = mysql_query(fileSQL, $oprbase) or die(mysql_error()); echo вернёт "INSERT INTO files (postid, filename) VALUES('9','KING.TXT')", запрос выполнится в myadminе, но не хочет работать так, как написано выше - говорит "невозможно изменить страницу".
keymaster давай на первых порах научимся сначала отлаживаться? а потом вопросы задавать? ставим error_reporting(E_ALL); в сомнительных местах выводим print('то, что нужно'); и делаем flush(); учимся обрабатывать возвращаемый результат mysql_* $res = mysql_query(); if(!$res) { print('фигня:'.mysql_error()); } факт выполнения запроса где-то еще там совсем не утверждает, что он должен быть выполнен тут. и так далее ... p.s. ты win32 приложения как отлаживаешь? по наитию что ли?
PHP: error_reporting(E_ALL); $fileSQL = "INSERT INTO files (postid, filename) VALUES('".$Post_ID."','".$myfile_name."')"; print($fileSQL); mysql_select_db($database_oprbase, $oprbase); $Res = mysql_query(fileSQL, $oprbase) or die(mysql_error()); $res = mysql_query(); if(!$res) { print('фигня:'.mysql_error()); } невозможно отобразить страницу Обычно, если запрос выполняется в enterprise manager - значит он так же выполнится из приложения
Заработало в таком виде. PHP: error_reporting(E_ALL); $fileSQL = "INSERT INTO files (postid, filename) VALUES('".$Post_ID."','".$myfile_name."')"; print($fileSQL); mysql_select_db($database_oprbase, $oprbase); $Res = mysql_query($fileSQL, $oprbase); if(!$Res) { print('фигня:'.mysql_error()); }