[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Чтение с файла и выполнение базой данных
Plantis
Пишу скрипт для удобной инсталяции скрипта, но чтото не клеится.
PHP
$serverdb = "localhost";
$logindb = "root";
$passdb = "root";
$namedb= "plantis_engine";

$conn = mysql_connect("$serverdb","$logindb","$passdb");
            mysql_select_db("$namedb",$conn);
            
$filename 
= "dbtables\pages.pedb";
$file_handle = fopen("$filename", "r");
while (!feof($file_handle)) {
   $line = fgets($file_handle);
   echo $line;
}
fclose($file_handle);
        
$result 
= mysql_query($line,$conn);


содержание $line
SQL
CREATE TABLE `pages` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `name` TEXT NOT NULL, `comment` TEXT NOT NULL, `add_by` TEXT NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=cp1251 COLLATE=cp1251_bin AUTO_INCREMENT=1 ;

Не появляется в базе данных новой таблици.
В чём дело? Почему может не проходить запрос в БД?

делаю всё на локальной машине



Спустя 21 минута, 18 секунд (24.07.2009 - 15:59) waldicom написал(а):
Права есть? После mysql_query() допиши or die(mysql_error);

Спустя 9 минут, 32 секунды (24.07.2009 - 16:09) Plantis написал(а):
видаёт mysql_error
я так понимаю, это означает что нету конекта

Спустя 42 секунды (24.07.2009 - 16:10) waldicom написал(а):
mysql_error()

Спустя 4 минуты (24.07.2009 - 16:14) Plantis написал(а):
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 ') ENGINE=InnoDB DEFAULT CHARSET=cp1251 COLLATE=cp1251_bin AUTO_INCREMENT=1' at line 1


я сделал sql експорт с БД и по аналогии написал файл

Спустя 3 минуты, 35 секунд (24.07.2009 - 16:17) waldicom написал(а):
Может у тебя 4-й мускуль? Он вроде не понимает кодировок...
Проверь это запрос напрямую на той базе, в которой ты хочешь создать таблицу.

Или для проверки убери все кодировки, коллейшины и прочее из строки, оставь только
SQL
CREATE TABLE `pages` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `name` TEXT NOT NULL, `comment` TEXT NOT NULL, `add_by` TEXT NOT NULL )

Спустя 2 минуты, 40 секунд (24.07.2009 - 16:20) Plantis написал(а):
waldicom
Проверял. Копировал этот запрос и выполнял прямо в базу

Ваш SQL-запрос был успешно выполнен (Запрос занял 0.0634 сек)

Спустя 3 минуты, 42 секунды (24.07.2009 - 16:24) Plantis написал(а):
CREATE TABLE `pages` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `name` TEXT NOT NULL, `comment` TEXT NOT NULL, `add_by` TEXT NOT NULL ) ;
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 ')' at line 1


Сам запрос
CREATE TABLE `pages` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`name` TEXT NOT NULL,
`comment` TEXT NOT NULL,
`add_by` TEXT NOT NULL

) ;

Почему этот запрос нормально работает, если руками его запустить в базе, а черех ПХП нет.

Спустя 1 минута, 53 секунды (24.07.2009 - 16:25) waldicom написал(а):
Цитата (Plantis @ 24.07.2009 - 15:24)
CREATE TABLE `pages` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `name` TEXT NOT NULL, `comment` TEXT NOT NULL, `add_by` TEXT NOT NULL ) ;
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 ')' at line 1

Фиг понять. Сам запрос правильный. На всякий случай выведи так:
PHP
or die(mysql_query() . ' -> ' . $line);

Спустя 2 минуты, 56 секунд (24.07.2009 - 16:28) Plantis написал(а):
Warning: Wrong parameter count for mysql_query() in D:\wamp\www\Plantis_engine\install\install.php on line 14
-> ) ;
код файла install.php


PHP
01|  include ('../globals.php');
     
$conn = mysql_connect("$serverdb","$logindb","$passdb");
                mysql_select_db("$namedb",$conn);
            
       $filename 
= "dbtables\pages.pedb";
      
$file_handle = fopen("$filename", "r");
      
while (!feof($file_handle)) {
        $line = fgets($file_handle);
    
     echo $line;
        }
12| fclose($file_handle);
13|         print"<br>";
14| mysql_query($line) or die(mysql_query() . ' -> ' . $line);

Спустя 3 минуты, 45 секунд (24.07.2009 - 16:32) waldicom написал(а):
Я ошибся, хотел так:
PHP
or die(mysql_error() . ' -> ' . $line);

Ты не все копируй, еще и сам думай. Я ошибся, ты исправляй

Спустя 2 минуты, 25 секунд (24.07.2009 - 16:35) Plantis написал(а):
waldicom
smile.gif Та я уже немного запарился. Ненавижу когда, чтото не так и не понятно что.


CREATE TABLE `pages` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`name` TEXT NOT NULL,
`comment` TEXT NOT NULL,
`add_by` TEXT NOT NULL

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

Спустя 7 минут, 32 секунды (24.07.2009 - 16:42) Plantis написал(а):
Чтото поменялось smile.gif

SQL
CREATE TABLE `pages` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `name` TEXT NOT NULL, `comment` TEXT NOT NULL, `add_by` TEXT NOT NULL ) ;
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 'add_by` TEXT NOT NULL )' at line 1 -> `add_by` TEXT NOT NULL ) ;

Спустя 4 минуты, 12 секунд (24.07.2009 - 16:46) Plantis написал(а):
Вот
CREATE TABLE `pages` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
Query was empty ->

Спустя 7 минут, 13 секунд (24.07.2009 - 16:53) waldicom написал(а):
Значит выполняй запрос сразу после того, как ты считал строку.
Может быть у тебя в файле последняя строка пустая.

Спустя 20 минут, 19 секунд (24.07.2009 - 17:14) Plantis написал(а):
удалил всё в конце файла
теперь пишет тоже, что и раньше
CREATE TABLE `pages` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `comment` TEXT NOT NULL ) ENGINE = INNODB;
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 ') ENGINE = INNODB' at line 1 -> ) ENGINE = INNODB;

Спустя 6 минут, 33 секунды (24.07.2009 - 17:20) Plantis написал(а):






Думаю нашёл проблему. Скорее всего проблема при считывании с файла.
вот такой запрос работает нормально.
PHP
include ('../globals.php');
$conn = mysql_connect("$serverdb","$logindb","$passdb");
            mysql_select_db("$namedb",$conn);
        

        
            
$filename 
= "dbtables\parts.pedb";
$file_handle = fopen("$filename", "r");
while (!feof($file_handle)) {
   $line = fgets($file_handle);
   echo $line;
}
fclose($file_handle);
        print "<br>";
mysql_query('CREATE TABLE  `parts` (
 `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
 `name` TEXT NOT NULL ,
 `comment` TEXT NOT NULL ,
 `add_by` TEXT NOT NULL 
 ) ENGINE = INNODB;'
) or die(mysql_error() . ' -> ' . $line);


А вот этот не работает.
PHP
include ('../globals.php');
$conn = mysql_connect("$serverdb","$logindb","$passdb");
            mysql_select_db("$namedb",$conn);
        

        
            
$filename 
= "dbtables\parts.pedb";
$file_handle = fopen("$filename", "r");
while (!feof($file_handle)) {
   $line = fgets($file_handle);
   echo $line;
}
fclose($file_handle);
        print "<br>";
mysql_query($line) or die(mysql_error() . ' -> ' . $line);


Содержание файла визуально идентично с запросом в первом случае.

Пишет:
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 ') ENGINE = INNODB' at line 1 -> ) ENGINE = INNODB;


Спустя 1 час, 46 минут, 38 секунд (24.07.2009 - 19:07) waldicom написал(а):
Ёпта, я кажется понял... Запрос в файле идет одной строкой? Скорее всего НЕТ! А при использовании fgets надо чтобы одной...

Спустя 39 минут, 46 секунд (24.07.2009 - 19:47) Plantis написал(а):
тю. так в таком случае проще уже заменить функцию считывания fget

И еще. А почему тогда переменная $line при выводе её на экран содержит в себе весь нужный текст?

Спустя 58 минут, 51 секунда (24.07.2009 - 20:46) Plantis написал(а):
Проблему решил таким образом. Но по какойто причине
PHP
$filesizee = filesize($file_handle);
echo $filesizee;

отказывается работать. Пришлось вписать размер файла вручную - 5000. А можно было
PHP
$line = fread($file_handle, filesize($file_handle));
сделать так


Собственно решение:
PHP
include ('../globals.php');
$conn = mysql_connect("$serverdb","$logindb","$passdb");
            mysql_select_db("$namedb",$conn);
            
$filename 
= "dbtables\parts.pedb";
$file_handle = fopen("$filename", "r") or die("Can't open file!"); 


$line 
= fread($file_handle,5000);
   
   echo $line
;

fclose($file_handle);
        print "<br>";
mysql_query($line) or die(mysql_error() . ' -> ' . $line);

Спустя 13 часов, 40 минут, 9 секунд (25.07.2009 - 10:26) beginner написал(а):
Для файлов прикольная функция тоже -
file_get_contents($filename) - без всяких циклов
вернет содержимое файла

Спустя 44 минуты, 42 секунды (25.07.2009 - 11:10) Plantis написал(а):
Цитата
Для файлов прикольная функция тоже -
file_get_contents($filename) - без всяких циклов
вернет содержимое файла


А ты пробовал? У меня эта функция не пашет, хотя в учебниках есть.

Спустя 1 день, 6 часов, 54 минуты, 5 секунд (26.07.2009 - 18:05) anonymouse написал(а):
У меня не выполнился код выше...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.