Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запрос к базе не выполняется, дает ошибку 
V
    Опции темы
kaa
Дата 20.12.2006, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 817
Регистрация: 5.11.2005

Репутация: нет
Всего: 2



Возникла небольшая проблема:
есть php-скрипт принимающий sql запросы от клиента.

Вот в общем-то сама серцевина скрипта - остальное только обрабатывает ответ от запроса к БД:

Код

$str_sql = "SET NAMES cp1251";
mysql_query($str_sql, $conn);

$str_sql = $_REQUEST["sql"];
$res =  mysql_query($str_sql, $conn);


Так вот самое что интересное: запросы на выборку проходят, а на модификацию - вставку строки - нет smile
Пример запросов которыми тестил:
Код

SELECT * FROM catalogue
INSERT INTO catalogue(wares_category) values('8p')

В чём собствено прикол два яаса разбирался - так и не понял smile
PM MAIL   Вверх
PARROT
Дата 20.12.2006, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: 3
Всего: 50



Код

INSERT INTO catalogue VALUES ( '8p')



--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
kaa
Дата 20.12.2006, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 817
Регистрация: 5.11.2005

Репутация: нет
Всего: 2



PARROT, Тоесть поле ключа как бы не учитывается? У мя в таблице два поля: ключ и вот это smile
PM MAIL   Вверх
Bikutoru
Дата 20.12.2006, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


Профиль
Группа: Участник
Сообщений: 522
Регистрация: 24.5.2005
Где: Москва

Репутация: 2
Всего: 22



Цитата(kaa @  20.12.2006,  15:24 Найти цитируемый пост)
Тоесть поле ключа как бы не учитывается? У мя в таблице два поля: ключ и вот это

В том-то и дело, что учитывается. Идем на сайт MySQL, читаем документацию и видим:
Цитата

If you do not specify a list of column names for INSERT ... VALUES or INSERT ... SELECT, values for every column in the table must be provided by the VALUES list or the SELECT statement. If you do not know the order of the columns in the table, use DESCRIBE tbl_name to find out.

http://dev.mysql.com/doc/refman/4.1/en/insert.html

Как ты говоришь, у тебя в таблице два поля (поле ключа и wares_category). Следовательно запрос должен быть таким:
Код

INSERT INTO catalogue (id_column, wares_category) VALUES ('', '8p')

Как вариант возможна следующая конструкция:
Код

INSERT INTO catalogue SET wares_category='8p'




--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
Mal Hack
Дата 20.12.2006, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 11
Всего: 261



kaa, мой тебе совет. Перед тем, как создаешь темы, 10 раз на бумажке напиши различные варианты названия топика и выбери из них, который наиболее конкретно характеризует проблему.
Честно, задалбливает читать темы с перлами в названии "Помогите". Очень многие люди из уважения к себе давным давно в такие темы не заходят. Следовательно вероятность получения ответа на сабж существенно снижается.
PM ICQ   Вверх
kaa
Дата 20.12.2006, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 817
Регистрация: 5.11.2005

Репутация: нет
Всего: 2



Mal Hack, учту  smile 


Bikutoru,
Такой вариант опять не прокатил: INSERT INTO catalogue SET wares_category='8p'

Завтра попробую второй.... 


PM MAIL   Вверх
kaa
Дата 21.12.2006, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 817
Регистрация: 5.11.2005

Репутация: нет
Всего: 2



Помоему дело совсем не в запросах. Я поставил вывод переменной в которую сохраняю переданное значение sql и вот что он мне выводит:


Код

INSERT INTO catalogue VALUES ( \'8p\')


Эта зараза инвертирует кавычки автоматически. Как называет опция эта в инишнике - отрублю её нафиг. Как тока раньше не догадался. smile
PM MAIL   Вверх
Mal Hack
Дата 21.12.2006, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 11
Всего: 261



kaa, покажи код, который относится к выполнению запросов и преобразованию значений переменных, предварительно почитай в поиске, почему нельзя использовать $_REQUEST.
PM ICQ   Вверх
kaa
Дата 22.12.2006, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 817
Регистрация: 5.11.2005

Репутация: нет
Всего: 2



Mal Hack, Код на клиентской стороне? На серверной я в самом начале показал.
PM MAIL   Вверх
Mal Hack
Дата 22.12.2006, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 11
Всего: 261



kaa, кода на клиентсокй стороне у тебя быть не может... PHP на сервере работает.

Цитата(kaa @  22.12.2006,  18:01 Найти цитируемый пост)
На серверной я в самом начале показал. 

Да? А где же у тебя там запрос на выборку?
PM ICQ   Вверх
kaa
Дата 22.12.2006, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 817
Регистрация: 5.11.2005

Репутация: нет
Всего: 2



Э-э-э... А это что?

Код

$str_sql = $_REQUEST["sql"];
$res =  mysql_query($str_sql, $conn);



PM MAIL   Вверх
Mal Hack
Дата 22.12.2006, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 11
Всего: 261



kaa, откуда я знаю? Где я вижу, что это тот запрос, который ты приводил выше?
Блин, ну почитай хоть книжки про отладку...
PM ICQ   Вверх
kaa
Дата 23.12.2006, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 817
Регистрация: 5.11.2005

Репутация: нет
Всего: 2



Mal Hack, Так, чую взаимопонимания нетуть... Я ща кидану весь код и буду ооочень благодарен если вы укажите то что вам нужно было.

Код

<?php
session_start();
//include
require "../config.cfg";
//end_include

$conn = mysql_connect($host_db, $login_db, $password_db) or die ("Íåâîçìîæíî óñòàíîâèòü ñîåäèíåíèå ñ ÁÄ");
if(!mysql_select_db($name_db, $conn))
{
    echo "<div id=\"ErrorMessage\"><div>ERROR</div><div>Do not select database</div></div>";
    exit();
}

$str_sql = "SELECT * FROM adm";
$res = mysql_query($str_sql, $conn);
if(!$res)
{
    echo "error";
    exit();
}
/*if(($_SESSION['pass']!=mysql_result($res, 0, 1))||($_SESSION['log']!=mysql_result($res, 0, 0)))
{
    echo"<html><body style='text-align:center'><form name='f1' method='post'>login:&nbsp;<input type='text' name='l'>&nbsp;&nbsp;&nbsp;&nbsp;password:&nbsp;<input type='text' name='p'><br><br><input type='submit' value='Îòïðàâèòü'></form></body></html>";
}*/


$str_sql = "SET NAMES cp1251";
mysql_query($str_sql, $conn);

$str_sql = $_REQUEST["sql"];
$res =  mysql_query($str_sql, $conn);


if($_REQUEST['operation']=="select")
{
    $str_respond = "<div id=result_table>";
    $i=0;
    while($m_array = mysql_fetch_row($res))
    {
        $col = count($m_array);
        $str_respond = $str_respond."<div>";
        for($c=0; $c<$col; $c++)
        {
            $str_respond = $str_respond."<div>".$m_array[$c]."</div>";
        }
        $str_respond = $str_respond."</div>";
    }
    $str_respond = $str_respond."</div>";
    echo $str_respond;
    exit();
    //echo iconv("cp1251", "UTF-8", $str_respond);
}
else
{
    if($res)
    {
        echo "ok";
    }
    else
    {
        echo "error";
    }
}
?>

PM MAIL   Вверх
Mal Hack
Дата 23.12.2006, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 11
Всего: 261



Код

$str_sql = "SET NAMES cp1251";
mysql_query($str_sql, $conn);

Раньше надо.
А теперь укажи что и где не выполняется.й
PM ICQ   Вверх
kaa
Дата 23.12.2006, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 817
Регистрация: 5.11.2005

Репутация: нет
Всего: 2



Mal Hack, Так... Попробовал скрипт дома только что - всё работает... Тем ав  том что на работе в строку запроса перед одинарными и двойными кавычками автоматически добавляется обратный слеш. Чую я дело в настройках самого PHP. Код у меня рабочий.
Тока вот как эти настройки называются я незнаю smile Слышал что можно там делать так чтоюы он сам заслешивал кавычки, но названия непомню smile
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0838 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.