Здравствуйте! Моя проблема заключается в =>: В БД существует колонка ID. С помощью команды (SELECT MAX(id) AS id FROM 'тра-та-та') возможно узнать максимальный из существующих. Как я могу извлечь это значение из БД? Соединение с БД устанавливается с помощью PDO... Помогите пожалуйста
Код (Text): try { $sql = 'SELECT id, book_title FROM books'; $result = $pdo->query($sql); } catch (PDOException $e) { $error = 'Ошибка при извлечении пар слов' . $e->getMessage(); include 'error.html.php'; exit(); }
Так. Вопрос. Вы вообще программируете? Или вы сейчас пытаетесь таким образом получить некий готовый код, который на авось впихнёте абы куда в свой проект?
я читаю книгу (Кевин Янк - PHP и MySQL. От новичка к профессионалу). параллельно пытаюсь разобраться и немного усложняю. я так понимаю мне надо будет написать примерно так: $sql = 'SELECT MAX(id) AS id FROM 'тра-та-та''; $result = $pdo->query($sql); а дальше хз. в конце концов хотелось бы иметь переменную типа String
я понимаю, что при извлечении большого количества значений используют массив, но тут одно лишь значение. по сути нужно обратиться к БД с нужным запросом, а дальше результат преобразовать к нужному виду.
не. нет отдельных функций для получения одного значения или одной строки. PHP: function getFirstRow(... ... if ($result) { $row = $result->fetch_assoc(); if ($row) { return $row; } } return false; }
fetchColumn --- Добавлено --- Расшифрую пожалуй: PHP: <?php $query = "SELECT MAX(`id`) FROM `table_name`"; echo $pdo->query($query)->fetchColumn(0); Алиас в данном случае для поля не нужен, номер колонки тоже, но я поставил "0", чтоб было чуть понятней по вашей задаче.
ты не проверяешь, пришел ли ответ =) а то там не всегда ответ бывает. Бывает иногда что и ничего путного там не бывает.
Я проверяю... у себя в коде. Но расписывать по всем канонам - сейчас уже нет ни сил, ни желания. Эту радость оставляю на усмотрение ТС
Спасибо, это максимально похоже на то, что я и искал) Спасибо и Вам) И Вам, за уже третий способ определения макс id)
Если поле Id у тебя AUTO_INCREMENT то Код (Text): SELECT AUTO_INCREMENT -1 FROM information_schema.tables WHERE table_name = 'table_name'
Ваше решение не оптимальное с точки зрения перфоманса. В случае если по целевому полю создан индекс, оно в лучшем случае не сильно проиграет min/max. В противном же случае - проиграет сильно. Важно понимать разницу что lastinsertid может быть ни разу != max(id) из вашей таблицы
ну он не во всех случаях бывает. если праймари кей инкрементный то там не будет числа, как и в случае, если он текстовый и т.п.
Ну так учись нормально задавать вопрос Надо было написать: "Я вставил новую строку в таблицу, как мне узнать значение id (автоинкремент)", тебе бы сразу ответили. Эта функция работает только сразу после запроса insert, насколько я помню.