Помощник
|
1046: No database selected |
gaaarfild
|
Сообщение
#1
|
||
|
|
||
|
|||
KURT [197BD] |
13.2.2009, 15:29;
Ответить: KURT [197BD]
Сообщение
#2
|
|
у вас параметр функции и глобальная переменная имеют одинаковое название
|
|
|
gaaarfild
|
Сообщение
#3
|
|
Тоесть так нельзя, да?
|
|
|
KURT [197BD] |
13.2.2009, 16:20;
Ответить: KURT [197BD]
Сообщение
#4
|
|
уберите параметр функции для теста
|
|
|
ZiTosS |
13.2.2009, 20:50;
Ответить: ZiTosS
Сообщение
#5
|
|
gaaarfild, точнее сказать у тебя поступающие значение при вызове функции перекрывает глобальное. Поэтому зачем писать функции, если параметры которые в неё нужно передавать, ты делаешь глобальными?!
Функции для того и существуют, чтобы убрать глобальные переменные в коде, которые добавляют множество ошибок, как у тебя к примеру + улучшить читаемость кода. А ты всё это наоборот нарушаешь. Пусть даже в конфигурационном файле будут глобальные переменные подключения к БД. Но не надо их делать глобальными в функции, лучше передавать их при вызове через параметры. Например: <?php
$dbhost="localhost"; $dbuser="root"; $dbpass=""; $dbname="otchet"; ............................ function db_connect($db_host, $db_user, $db_pass, $db_name) { global $MYSQL_ERRNO, $MYSQL_ERROR; $link_id = mysql_connect($db_host, $db_user, $db_pass); mysql_query("SET NAMES 'cp1251'"); if(!$link_id) { $MYSQL_ERRNO = 0; $MYSQL_ERROR = "Не удалось подключиться к узлу <B>$dbhost.</b>"; return 0; } else if(!mysql_select_db($db_name)) { $MYSQL_ERRNO = mysql_errno(); $MYSQL_ERROR = mysql_error(); return 0; } else return $link_id; } ..................... db_connect($dbhost, $dbuser, $dbpass, $dbname); ?> |
|
|
gaaarfild
|
Сообщение
#6
|
|
Все в порядке, спасибо, исправил. Вот еще вопрос. Где тут я ошибся в коде?
Просто хотел написать функцию, которая делает бэкап БД в файл. И так же может обратно загружать то что отбэкаплено. Когда я загружаю этот файл вот с таким кодом: INSERT INTO item_data (id, item_name, couple, price, description) VALUES (NULL, `Бур зубной №10`, 14, 10, `Бур, для удаления кариеса. Среднего размера.`), (NULL, `Дренажная трубка`, 8, 83, `Дренаж, для удаления слюны. Полиуретан`); он не может добавить данные в БД. if(isset($_POST['openfile'])) { //Задано условие загрузки файла Backup. $userfile_name = $_FILES['userfile']['name']; $fo = fopen($userfile_name, "r"); $file = fread($fo, 300); fclose($fo); echo $file; $load_file = mysql_query($file); if(!$load_file) die("<BR><span class='err_mess'><i>Не удалось загрузить файл</i> <B>$userfile_name</b>!</span>"); echo "<BR>$userfile_name успешно загружен!"; } Вот сам блок добавления. И еще вопрос. Как вот в этой стороке $file = fread($fo, 3000); Сделать так, чтобы длинна файла задавалась в зависимости от его реальной длины. Тоесть второй параметр чтобы был нестатичный, а меняющийся, для экономии ресурсов. |
|
|
KURT [197BD] |
16.2.2009, 17:26;
Ответить: KURT [197BD]
Сообщение
#7
|
|
$file = fread($fo, filesize($fo)); все названия таблиц и полей в запросе берите в `такие кавычки` а значения (кроме численных) в 'такие кавычки'. Для теста запустите свой скрипт в майадмине |
|
|
ZiTosS |
16.2.2009, 22:21;
Ответить: ZiTosS
Сообщение
#8
|
|
gaaarfild, как уже сказали, надо подучить синтаксис SQL
INSERT INTO item_data (id, item_name, couple, price, description) VALUES (NULL, 'Бур зубной №10', 14, 10, 'Бур, для удаления кариеса. Среднего размера.'), (NULL, 'Дренажная трубка', 8, 83, 'Дренаж, для удаления слюны. Полиуретан'); Также не нужно забывать отслеживать ошибки ......... mysql_query($file) or die("Ошибка:".mysql_error()); ............. Сделать так, чтобы длинна файла задавалась в зависимости от его реальной длины Я обычно пользуюсь не бинарным считыванием данных, а построчным file(). Особенно если каждый запрос на новой строке, и написан в одну строку. Хотя если правильнее, то вообще нужно писать обработчик, который будет искать начало запроса и конец(признак ";") |
|
|
gaaarfild
|
Сообщение
#9
|
|
И еще, возникла такая проблема. Вот код.
$query_files = mysql_query("SELECT * FROM item_data", $link_id); $head_bkp = "TRUNCATE TABLE item_data; \r\n "; $head_bkp .="INSERT INTO item_data (id, item_name, couple, price, description) VALUES"; $fo = fopen($fname, "a+"); fwrite($fo, $head_bkp); while($qd = mysql_fetch_array($query_files)) { $body_bkp = " \r\n(NULL, '{$qd[item_name]}', {$qd[couple]}, {$qd[price]}, '{$qd[description]}'),"; fwrite($fo, $body_bkp); } fclose($fo); Это блок, который копирует данные из базы в файл. Возникла проблема. Как бы сделать так, чтобы в самом конце он добавил ";" удалив последнюю запятую. И еще, как бы можно было очистить перед этим таблицу. Truncate table - не работает. Выдает ошибку. |
|
|
ZiTosS |
17.2.2009, 0:48;
Ответить: ZiTosS
Сообщение
#10
|
|
|
gaaarfild,
TRUNCATE TABLE item_data; Здесь то всё правильно в запросе, но скорее всего проблема в \r\n, обработай строку после считки $file = str_replace("\r\n", "", $file); По поводу замены последнего символа strrpos() $num = strrpos(",", $file); $file[$num]=";";
|
|
|
||
|
Текстовая версия | Сейчас: 19.4.2024, 20:35 |