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

Форум MySQL

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Запись в бд.
 
 автор: Virtus-pro   (10.08.2009 в 13:46)   письмо автору
 
 

Здравствуйте уважаемы форумчане.

Не сочтите за наглость, сколько я уже перечитал инфы. В одном месте я могу добавлять в бд записи, в другом нет, с чем связано не пойму. все время пишет Table 'amx_servers' is read only

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

<?php

$link 
mysql_connect("localhost""root""")
or die(
"Не могу подключиться" ); 
mysql_select_db('2'$link) or die ('Не могу выбрать БД');
include 
"include/function.php";
$servers dbquery("SELECT * FROM amx_servers");
while(
$r=dbarray_fetch($servers)) {
$serv=serverInfo("$r[server_ip]");
/*
if($serv['status']=='off'){


continue;}
*/
$server_name=$serv['name'];
$server_map=$serv['map'];
$server_players=$serv['players'];
$server_max_players=$serv['max_players'];

$result dbquery("INSERT INTO amx_servers(server_name, server_ip, server_map, server_players,server_maxplayers, server_status) VALUES ('".$serv['name']."','".$r['server_ip']."','".$server_map."','".$server_players."','".$server_max_players."','1')");
$result2 mysql_query($result);

if(
$result2) {echo "<font color='green'>Даные сервера с порядковым ".$r['server_id']." внесены в базу данных</font>";} else {echo "<font color='red'><b>Ошибка</b>, данные сервера с порядковым ".$r['server_id']." не были внесены в БД</font>";}
echo 
"<br>";
}
// MySQL функции
function dbquery($query) {
    
$result = @mysql_query($query);
    if (!
$result) {
        echo 
mysql_error();
        return 
false;
    } else {
        return 
$result;
    }
}
function 
dbarray_fetch($query) {
    
$result = @mysql_fetch_array($query);
    if (!
$result) {
        echo 
mysql_error();
        return 
false;
    } else {
        return 
$result;
    }
}
mysql_close($link);
?>

функция serverInfo возвращает инфу о сервере. надо записать все это в бд с именем 2 и в таблицу amx_servers

Как видите сделал вывод при ошибке. НУ пишет так )
Table 'amx_servers' is read onlyОшибка, данные сервера с порядковым $n не были внесены в БД


Что я не так делаю? почему эта ошибка, я понять ничего не могу.

  Ответить  
 
 автор: Trianon   (10.08.2009 в 13:49)   письмо автору
 
   для: Virtus-pro   (10.08.2009 в 13:46)
 

так может и вправду на файле с таблицей флаг Readonly стоит?

  Ответить  
 
 автор: Virtus-pro   (10.08.2009 в 14:26)   письмо автору
 
   для: Trianon   (10.08.2009 в 13:49)
 

Это на каком файле еще? Ну по идее у меня есть ROOT доступ. Так как стоит на компе веб сервер. Считывает нормально с бд. Есть еще записи чтобы форма отправляет и записывает в бд новую строку. Так вот это все отлично.

  Ответить  
 
 автор: Trianon   (10.08.2009 в 14:48)   письмо автору
 
   для: Virtus-pro   (10.08.2009 в 14:26)
 

Сервер БД под Windows или по unix?
Таблица InnoDB или MyISAM?

Таблицы MyIASM хранятся в отдельных файлах.
Readonly может быть выставлено либо флагами на файлах, либо правами доступа.

Возможна, конечно, ситуация, что у SQL-клиента просто нет прав на INSERT-запрос, только, по-моему, диагностика в этом случае - другая.


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

  Ответить  
 
 автор: Virtus-pro   (10.08.2009 в 15:04)   письмо автору
 
   для: Trianon   (10.08.2009 в 14:48)
 

Да, Спасибо. Перезапуск сервера и правда помог. А то я себе голову сломал уже.
ОС : Windows Seven.
Таблица MyISAM
Хотя насколько я знаю в винде прав никаких не надо на файлы, может глюк винды самой был. Кстати веб сервер стоит Denwer.
Теперь появилась другая ошибка.
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 '1' at line 1


Там же надо было не INSERT INTO а UPDATE. Блин.
А вот еще вопрос. Смотрите на мой код выше.
там запрос INSERT INTO amx_servers(server_name, server_ip.... ) VALUES (...)");
Как бы преобразовать все это в обновление?
Как я понял надо так:
UPDATE amx_servers SET.... Задачка в том что в какой последовательности мне записать много значений.
UPDATE amx_servers SET (server_name, server_ip.... ) VALUES (...) WHERE id=".r['server_id']."");
По моей логике так.

  Ответить  
 
 автор: Trianon   (10.08.2009 в 17:10)   письмо автору
 
   для: Virtus-pro   (10.08.2009 в 15:04)
 

UPDATE `таблица`
  SET 
    `поле1` = значение1, 
    `поле2` = значение2,
   ...
    `поле` = значение
 
   WHERE условие 


http://dev.mysql.com/doc/refman/5.1/en/update.html

  Ответить  
 
 автор: Trianon   (10.08.2009 в 17:14)   письмо автору
 
   для: Virtus-pro   (10.08.2009 в 15:04)
 

>Хотя насколько я знаю в винде прав никаких не надо на файлы,

Чушь. Впрочем, Вас оправдывает, что это довольно распространенная чушь.

В Windows (NT, 2000, Vista, Seven и т.д.) т.е. везде где применяется NTFS - с правами на файлы всё куда круче и запутаннее, чем в unix.

Просто 95% сидят под правами администратора и им всё открыто.
Им, но не сервисам, которые запускаются от совершенно других эккаунтов нежели.

  Ответить  
 
 автор: Virtus-pro   (10.08.2009 в 17:51)   письмо автору
 
   для: Trianon   (10.08.2009 в 17:14)
 

Сделал самый просто запрос.
$result = dbquery("UPDATE amx_servers SET server_name = ".$server_name." WHERE server_id=1");

выдает ошибку
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 '[KSO]csdmo.oo.lv WHERE server_id=1' at line 1You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[KSO]csdmo.oo.lv WHERE server_id=1' at line 1


если делаю такой запрос
$result = dbquery("UPDATE amx_servers SET server_name = 3  WHERE server_id=1");

все отлично записывает
Если делаю вот так
echo $serv['name']."<br>";
$result = dbquery("UPDATE amx_servers SET server_name = ".$server_name." WHERE server_id=1 ");

будет так

[KSO]csdmo.oo.lv
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 '[KSO]csdmo.oo.lv WHERE server_id=1' at line 1You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[KSO]csdmo.oo.lv WHERE server_id=1' at line 1


То есть выходит что в переменной пристствует значенеи как надо. Но почему то эта переменная не хочет отправляться в бд почему то.

  Ответить  
 
 автор: Trianon   (10.08.2009 в 21:37)   письмо автору
 
   для: Virtus-pro   (10.08.2009 в 17:51)
 

Запрос на экран выведите, перед тем как исполнять - всё ствнет ясно.
По моему, Вы просто текстовое значение в кавычки не заключили.

  Ответить  
 
 автор: Virtus-pro   (10.08.2009 в 22:21)   письмо автору
 
   для: Virtus-pro   (10.08.2009 в 17:51)
 

Вы правы, ковычки поставил и все заработало. Спасибо большое.

  Ответить  
Rambler's Top100
вверх

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