|
|
|
| Здравствуйте уважаемы форумчане.
Не сочтите за наглость, сколько я уже перечитал инфы. В одном месте я могу добавлять в бд записи, в другом нет, с чем связано не пойму. все время пишет 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 не были внесены в БД
|
Что я не так делаю? почему эта ошибка, я понять ничего не могу. | |
|
|
|
|
|
|
|
для: Virtus-pro
(10.08.2009 в 13:46)
| | так может и вправду на файле с таблицей флаг Readonly стоит? | |
|
|
|
|
|
|
|
для: Trianon
(10.08.2009 в 13:49)
| | Это на каком файле еще? Ну по идее у меня есть ROOT доступ. Так как стоит на компе веб сервер. Считывает нормально с бд. Есть еще записи чтобы форма отправляет и записывает в бд новую строку. Так вот это все отлично. | |
|
|
|
|
|
|
|
для: Virtus-pro
(10.08.2009 в 14:26)
| | Сервер БД под Windows или по unix?
Таблица InnoDB или MyISAM?
Таблицы MyIASM хранятся в отдельных файлах.
Readonly может быть выставлено либо флагами на файлах, либо правами доступа.
Возможна, конечно, ситуация, что у SQL-клиента просто нет прав на INSERT-запрос, только, по-моему, диагностика в этом случае - другая.
Меж тем, я бы сперва посоветовал сервер перезапустить.
Потому что если это временный сбой, то смысла его анализировать - мало. | |
|
|
|
|
|
|
|
для: 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']."");
По моей логике так. | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: Virtus-pro
(10.08.2009 в 15:04)
| | >Хотя насколько я знаю в винде прав никаких не надо на файлы,
Чушь. Впрочем, Вас оправдывает, что это довольно распространенная чушь.
В Windows (NT, 2000, Vista, Seven и т.д.) т.е. везде где применяется NTFS - с правами на файлы всё куда круче и запутаннее, чем в unix.
Просто 95% сидят под правами администратора и им всё открыто.
Им, но не сервисам, которые запускаются от совершенно других эккаунтов нежели. | |
|
|
|
|
|
|
|
для: 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
|
То есть выходит что в переменной пристствует значенеи как надо. Но почему то эта переменная не хочет отправляться в бд почему то. | |
|
|
|
|
|
|
|
для: Virtus-pro
(10.08.2009 в 17:51)
| | Запрос на экран выведите, перед тем как исполнять - всё ствнет ясно.
По моему, Вы просто текстовое значение в кавычки не заключили. | |
|
|
|
|
|
|
|
для: Virtus-pro
(10.08.2009 в 17:51)
| | Вы правы, ковычки поставил и все заработало. Спасибо большое. | |
|
|
|