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

Форум MySQL

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Выполняем SQL-дамп на сервере средствами PHP

Сообщения:  [1-10]   [11-17] 

 
 автор: cheops   (15.09.2005 в 23:02)   письмо автору
 
   для: Денис   (15.09.2005 в 18:03)
 

Чего-то не очень понятно...

   
 
 автор: Денис   (15.09.2005 в 18:03)   письмо автору
 
   для: cheops   (15.09.2005 в 16:50)
 

сделал немного по другому.

if ($plural_query != "")
            {
                // open file and read in buffer
                $fp = fopen($plural_query,"rb");
                $bufer = fread($fp,filesize($plural_query));
                fclose($fp);
                $quer = explode(";", $bufer);
                unset($quer[sizeof($quer) - 1]);
                //$query = trim($plural_query);
                foreach($quer as $query)
                {
                    //$query = trim($query);
                    if(!mysql_query($query))
                      {
                        exit(mysql_error());
                      }
                    else
                    echo "Your SQL-query has been executed successfully"."<br>";
                }
            }

Немного коряво, но работает. Нашел ошибку в другом.
когда в окне для одиночного запроса написать тот же самый скрипт, который, скажем, используется в файле(который мы можем загрузить и выполнить - и все запросы выполнятся успешно). В одиночном случае странная ошибка: указывает, что в sql-запросе есть ошибка, даже строку указывает. Тот же самый запрос из файла! Он реагирует на размер запроса? как это обойти?

   
 
 автор: cheops   (15.09.2005 в 16:50)   письмо автору
 
   для: Денис   (15.09.2005 в 15:07)
 

А через функцию trim() запросы пропускали?

   
 
 автор: Денис   (15.09.2005 в 15:07)   письмо автору
 
   для: cheops   (15.09.2005 в 14:00)
 

поспешил с ответом. результат тот же. для ясности - вот скрипт

if($REQUEST_METHOD=="POST")
{
        $dblocation = $_POST['host'];
        $dbuser = $_POST['name'];
        $dbpasswd = $_POST['password'];
        $dbname = $_POST['databasename'];
        $query = $_POST['query'];
        $query = trim($query);
        $quer = trim($quer);
        $plural_query = $_FILES['plural_query']['tmp_name'];
        if($dblocation !="" && $dbuser !="" && $dbname !="")
        {
            $dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);
            if (!$dbcnx)  
            {
              exit( "<P>Server database not access.</P>" );
            }
            
            if (! @mysql_select_db($dbname,$dbcnx) )
            {
              exit( "<P>Database not disclosure.</P>" );
            } 
            if($query != "")
            {
                if(!mysql_query($query))
                  {
                    exit(mysql_error());
                  }
                else
                echo "Your SQL-query has been executed successfully";
                //refresh();
            }
            if ($plural_query != "")
            {
                // open file and read in buffer
                $fp = fopen($plural_query,"rb");
                $bufer = fread($fp,filesize($plural_query));
                fclose($fp);
                $quer = explode(";", $bufer);
                foreach($quer as $query)
                {
                      
                    if(!mysql_query($query))
                      {
                        exit(mysql_error());
                      }
                    else
                    echo "Your SQL-query has been executed successfully";
                }
            }
        }
        else
        {
            echo "You inputing data incorrect";
            exit;
        }
}

что не так и почему он в результате запроса пишет:
Your SQL-query has been executed successfullyQuery was empty не пойму. если отключить error() - не выводит, но страховки никакой

   
 
 автор: Денис   (15.09.2005 в 14:41)   письмо автору
 
   для: cheops   (15.09.2005 в 14:00)
 

наконец - то! свершилось :-), спасибо большое

   
 
 автор: cheops   (15.09.2005 в 14:00)   письмо автору
 
   для: Денис   (15.09.2005 в 11:17)
 

1) Нет ли на странице ещё функций mysql_query()?
2) Выведите дамп массива $quer - есть в нём пустые строки?
<?php
  
echo "<pre>";
  
print_r($quer):
  echo 
"</pre>";
?>

3) Воможно так пробелы - прогоните $query через trim
<?php
foreach($quer as $query
            { 
                if(!empty(
$query)) // или if($query != "") 
                

                    
$query trim($query);
                    if(!
mysql_query($query)) 
                      { 
                          exit(
mysql_error()); 
                      } 
                } 
                else 
                { 
                    exit(); 
                } 
            }
?>

   
 
 автор: Денис   (15.09.2005 в 11:17)   письмо автору
 
   для: cheops   (14.09.2005 в 21:46)
 

Если цикл должен выглядеть вот так:

foreach($quer as $query)
            {
                if(!empty($query)) // или if($query != "")
                {
                    if(!mysql_query($query))
                      {
                          exit(mysql_error());
                      } 
                }
                else
                {
                    exit();
                }
            } 

то результат тот же.
Query was empty

   
 
 автор: cheops   (14.09.2005 в 21:46)   письмо автору
 
   для: Денис   (14.09.2005 в 20:09)
 

То, что запрос пуст связано с тем, что последний элемент массива пустой - это ничего страшного, просто добавьте в foreach проверку не является ли $query - пустой строкой, и если это так, просто не выполняйте запрос.

   
 
 автор: Денис   (14.09.2005 в 20:09)   письмо автору
 
   для: cheops   (14.09.2005 в 13:45)
 

создал скрипт, работает, но есть одна неточность в выполнении.
если в скрипте

// open file and read in buffer
            $fp = fopen($plural_query,"rb");
            $bufer = fread($fp,filesize($plural_query));
            fclose($fp);
            $quer = explode(";", $bufer);
            foreach($quer as $query)
            {
              if(!mysql_query($query))
              {
                  exit(mysql_error());
              } 
            } 

строка $quer = explode(";", $bufer); выполняет все правильно, запрос выполняется и таблица в базе данных создается, то при этом mysql_error() ошибку что запрос пуст!
Если эту строку заменить на
$quer = preg_split("|\);\r\n|", $bufer); то запрос не выполняется, на этот раз mysql_error() ругается вот так:
You have an error in your SQL syntax near '; ' at line 15, т.е. на последнюю строку
Сам запрос следующего содержания:

CREATE TABLE abc(
  id_author int(6) NOT NULL auto_increment,
  name text,
  passw text,
  email text,
  url text,
  i&#241;q text,
  about text,
  photo text,
  time datetime default NULL,
  last_time datetime default NULL,
  themes int(10) default NULL,
  statususer int(2) default NULL,
  PRIMARY KEY (id_author)
) TYPE=MyISAM;

Проблема, скорее всего в регулярном выражении? Если да, то почему тогда в первом варианте все в норме, но выдает такую странную ошибку, запрос ведь выполняется(во втором случае - нет)?

   
 
 автор: cheops   (14.09.2005 в 13:45)   письмо автору
 
   для: Денис   (14.09.2005 в 11:27)
 

Вам нужно только его содержимое и только один раз, прочитайте его прямо из временной папки с непонятным названием и забудьте про него - далее можно работать уже с его содержимым.

   

Сообщения:  [1-10]   [11-17] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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