Оператор SQL работает отдельно, но вместе он не будет

Я пытаюсь получить пользователя

function getItemName($dbh, $userId) {
    $itemId = getItemId($dbh, $userId); // the getItemId() function works
    echo "item id is: " . $itemId ; // because I can see the correct result if I echo it
    $sql = "SELECT name FROM items WHERE id = :item_id";
    $stm = $dbh->prepare($sql);
    $stm->bindParam(':item_id', $itemId, PDO::PARAM_INT);
    $stm->execute();
    $result = $stm->fetch();
    return $result['name'];
}

И я получаю Trying to access array offset on value of type bool в строке return $result['name'];. Поле name существует в таблице items, так что это не проблема.

Кроме того, когда я пытаюсь продолжить его тестирование, я изменяю оператор $sql на SELECT * FROM items, а затем, когда я делаю echo $stm->rowCount(), он находит правильное количество строк (с исходным количеством строк оператора SQL, равным 0)

Не могу понять, чем это вызвано

Какова структура вашей таблицы? Какой код для getItemID()? Вы на 100% уверены, что значение, возвращаемое как $itemId, является допустимым значением в базе данных? Предположительно ответ (bool) FALSE указывает на то, что запрос выполнен безрезультатно...

Steven 18.12.2020 18:47

попробуйте добавить PDO::FETCH_ASSOC в свой выбор. вот так: $result = $stm->fetch(PDO::FETCH_ASSOC);

André Walker 18.12.2020 18:49

Пожалуйста, покажите нам, как вы подключаетесь к базе данных

RiggsFolly 18.12.2020 18:50

Это говорит о том, что переменная $result является логической (скорее всего, FALSE). Поэтому по какой-то причине запрос не выполнен.

RiggsFolly 18.12.2020 18:54
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout.
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout.
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для...
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
0
4
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У меня есть 3 предложения:

  • Обязательно преобразуйте $itemId в целое число, используя intval();
  • Непосредственно перед возвратом результата функции убедитесь, что запрос вернул результаты.
$result = $stm->fetch();
if (!$result){
 return null;
}
return $result['name'];
  • Наконец, что более очевидно, убедитесь, что искомый itemId существует в БД.

Вот в чем проблема! Спасибо. Я удалил несколько строк из одной из таблиц, поэтому он существовал в одной таблице, а не в другой, поэтому он возвращал результаты в одной функции, а не в другой. Я также добавлю if (!$result), чтобы исправить это, если нет результатов

pileup 19.12.2020 11:33

Другие вопросы по теме