powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Простой вопрос PHP + MySQL
15 сообщений из 15, страница 1 из 1
Простой вопрос PHP + MySQL
    #38844240
manager5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет, пишу на PHP + MySQL, помогите с запросом.

Что имеем на входе:

Таблица MySQL:

UIN Ref

EDAF4 2
EDAF4 1
EDAF4 3
PDE45 1

Цель - получить из БД одну строку, по значению UIN, с минимальным значением Ref. После выдачи строки скриптом PHP - удалить ее из БД.

В нашем примере результатом запроса будет строка "EDAF4 | 1" и последующее ее удаление из БД.

Моих познаний хватило чтобы написать следующее, но при выдаче пустой строки - выдает непонятную ошибку и отбора строки с минимальным значением из столбца Ref - НЕТ! как и удаления.

Если в запрос передать несуществующее значение UIN выдает следующее:

Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 2 in /home/public_html/1.php on line 25
--MySQL--Select---Output---Begin------SQL--peremennaja---mysql_result---begin-----SQL--peremennaja---mysql_result---end---



Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
$UIN = "EDAF4";
$result = mysql_query('SELECT COMMAND FROM commands WHERE UIN="'.$UIN.'"');
if (!$result) {
    echo "Ошибка выполнения SELECT запроса - ", mysql_error();
}

$abc = mysql_result($result, 0);
echo "--MySQL--Select---Output---Begin----";
echo "--SQL--peremennaja---mysql_result---begin---";
echo $abc;
...
Рейтинг: 0 / 0
Простой вопрос PHP + MySQL
    #38844252
NikolayV81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
manager5555,

Код: php
1.
2.
3.
4.
5.
6.
7.
if (!$result) {
    echo "Ошибка выполнения SELECT запроса - ", mysql_error();
} else {
    if ( mysql_num_rows($result) > 0 ) {
         $abc = mysql_result($result, 0);
    }
};



НО!
1. используйте mysqli!
2. "!mysql_query('SELECT COMMAND FROM commands WHERE UIN="'.$UIN.'"')" так делать нельзя отучите себя от этого;
3. mysql_result не самая лучшая функция
...
Рейтинг: 0 / 0
Простой вопрос PHP + MySQL
    #38844253
NikolayV81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
помимо прочего для кого писали и переводили документация :(
https://php.net/manual/en/function.mysql-result.php
...
Рейтинг: 0 / 0
Простой вопрос PHP + MySQL
    #38844411
manager5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо, как определить пустую строку - заработало. Оказывается помимо запросов SELECT и INSERT есть много полезных функций. Прочитать про них можно здесь - http://php.net/manual/ru/ref.mysql.php .

а как сделать выборку из полученных 3 строк с одинаковым значением UIN - одну строку с наименьшим значением Ref ? Какую конструкцию использовать?
...
Рейтинг: 0 / 0
Простой вопрос PHP + MySQL
    #38844429
manager5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Nick , что в этой строке не так 2. "!mysql_query('SELECT COMMAND FROM commands WHERE UIN="'.$UIN.'"')" так делать нельзя отучите себя от этого; - работает же .
...
Рейтинг: 0 / 0
Простой вопрос PHP + MySQL
    #38844437
manager5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Отвечаю на вопрос который задавал - SELECT COMMAND, MIN(REF) FROM commands WHERE UIN="EDAF4" - выдаст 1 строку с совпадением по UIN и минимальным значением REF.
...
Рейтинг: 0 / 0
Простой вопрос PHP + MySQL
    #38844442
manager5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Странно, но функция mysql_num_rows($result) возвращает 1 даже если мы вводим несуществующий UIN. В конструкторе запросов показывает строку с содержимым NULL.

Опять возник вопрос определения пустой строки.
Фактически строка пустая , а mysql_num_rows($result) выдает 1???
...
Рейтинг: 0 / 0
Простой вопрос PHP + MySQL
    #38844449
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
manager5555Отвечаю на вопрос который задавал - SELECT COMMAND, MIN(REF) FROM commands WHERE UIN="EDAF4" - выдаст 1 строку с совпадением по UIN и минимальным значением REF.Неверно.
Выдаст одну запись (не путайте со строками). В которой в первом поле будет значение поля COMMAND из любой записи таблицы, которой удовлетворяет условие UIN="EDAF4". А во втором поле будет минимальное значение поля REF. И эти значения вполне могут быть взяты из разных записей.
Если записей, которые удовлетворяют условие UIN="EDAF4", нет, то результатом будет одна запись с NULL обоих полях.
...
Рейтинг: 0 / 0
Простой вопрос PHP + MySQL
    #38844455
manager5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft, так и получилось - выдает запись со значением NULL если UIN ввели неправильный(в БД такого нет). Решил проверкой на значение NULL.

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
$result = mysql_query('SELECT COMMAND, MIN(REF) FROM commands WHERE UIN="'.$UIN.'"');
if (!$result) {
    echo "Ошибка выполнения SELECT запроса - ", mysql_error();
}

if ( mysql_num_rows($result) == 0 or is_null(mysql_result($result, 0)) == 1) {
        echo "сравнение выполнено совпадений не найдено";
        $abc = "empty";
    }
else {
         $abc = mysql_result($result, 0);
         echo "сравнение выполнено совпадения найдены - ";
          echo "удаляем строку из БД - ";

//Дальше не рабочий кусок
         $sqldlt = "DELETE FROM commands WHERE UIN =  "EDAF4" AND MIN( Ref )";

         if (mysql_query($connect, $sqldlt)) {
             echo "Record deleted successfully";
         } else {
             echo "Error deleting record: " . mysqli_error($conn);
         }
      
}



Выделено то что еще не отладил и пока не работает... DELETE

miksoft, правильно ли я понял, что сейчас мой запрос может выдать значение UIN из одной строки, значение REF из другой строки таблицы? Если да то меня такой вариант не устраивает - переделывать буду. В чем ошибка?
...
Рейтинг: 0 / 0
Простой вопрос PHP + MySQL
    #38844484
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
manager5555miksoft, правильно ли я понял, что сейчас мой запрос может выдать значение UIN из одной строки, значение REF из другой строки таблицы?именно так, об этом я говорил выше.
Нужно примерно так:
Код: sql
1.
SELECT COMMAND, REF FROM commands WHERE UIN='EDAF4' ORDER BY REF LIMIT 1
...
Рейтинг: 0 / 0
Простой вопрос PHP + MySQL
    #38844488
manager5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftmanager5555miksoft, правильно ли я понял, что сейчас мой запрос может выдать значение UIN из одной строки, значение REF из другой строки таблицы?именно так, об этом я говорил выше.
Нужно примерно так:
Код: sql
1.
SELECT COMMAND, REF FROM commands WHERE UIN='EDAF4' ORDER BY REF LIMIT 1



Супер, работает.
...
Рейтинг: 0 / 0
Простой вопрос PHP + MySQL
    #38844672
manager5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот результат:
Выборка из таблицы по одному полю и минимальному значению второго поля. С определением пустой выдачи и удалением записи после выдачи.

Проверил - работает.

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
$UIN = "123456789";
$result = mysql_query('SELECT COMMAND FROM commands WHERE UIN="'.$UIN.'" ORDER BY REF LIMIT 1');
if (!$result) {
    echo "Ошибка выполнения SELECT запроса - ", mysql_error();
}

if ( mysql_num_rows($result) == 0 or is_null(mysql_result($result, 0)) == 1) {
        echo "сравнение выполнено совпадений не найдено";
        $abc = "empty";
    }
else {
         $abc = mysql_result($result, 0);
         echo "сравнение выполнено совпадения найдены - ";
         echo "удаляем строку из БД - ";
         $sqldlt = mysql_query('DELETE FROM commands WHERE UIN="'.$UIN.'" ORDER BY REF LIMIT 1');

         if (!$sqldlt) {
             echo "Ошибка удаления записи из БД " . mysql_error();
         } else {
             echo "Запись успешно удалена из БД ";
         }
          
}



Благодарю за помощь.
...
Рейтинг: 0 / 0
Простой вопрос PHP + MySQL
    #38844700
NikolayV81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
manager5555
Код: php
1.
$result = mysql_query('SELECT COMMAND FROM commands WHERE UIN="'.$UIN.'" ORDER BY REF LIMIT 1');




1. так делать нельзя потому что sql injection , используйте параметры и mysqli

2. "mysql_" фунции не рекомендованы к применению разработчиками PHP почему у них написано, дело ваше конечно ;).
...
Рейтинг: 0 / 0
Простой вопрос PHP + MySQL
    #38845059
manager5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Nickolay, спасибо за совет. Про инжекшн помню. Но защита от него на последнем месте, - когда будет готов функционал программы. Подскажите способы защиты от SQL injection? Что значит параметры?
...
Рейтинг: 0 / 0
Простой вопрос PHP + MySQL
    #38845078
NikolayV81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
manager5555Nickolay, спасибо за совет. Про инжекшн помню. Но защита от него на последнем месте, - когда будет готов функционал программы. Подскажите способы защиты от SQL injection? Что значит параметры?

как бы это сказать, защиту потом не притянешь за уши, лучше сразу :)
думаю вам вот это почитать:
http://php.net/manual/ru/mysqli-stmt.bind-param.php

в принципе проблема, в кратце, в том что вы просто собираете строку запроса из каких-то переменных, при этом поначалу вы можете вполне всё контролировать, но со временем кода становится много и начинаются проблемы ( а сам PHP как язык этому ещё и сильно способствует ). На самом деле использование параметров конечно не избавляет от проблемы полностью ( никто не мешает потом неудачно считать данные из базы, и сделать с ними что-то не то) но в большинстве случаев этого достаточно.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Простой вопрос PHP + MySQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]