Вопрос или проблема
У меня есть столбец с автоинкрементом под названием “company_id” в моей базе данных MySQL, который назначает номер ID каждой зарегистрированной компании. Я не могу выбрать компанию по company_id. Это не возвращает ни ошибку, ни результаты, все другие столбцы в таблице работают нормально. Другие операторы работают с этим конкретным столбцом нормально, но знак = не работает без ошибки.
$query1 = "SELECT company FROM company_reg WHERE company_id=1";
Если я изменяю его на код ниже, скрипт работает нормально.
WHERE company_id > 1
Если я пытаюсь выбрать по любому другому столбцу, скрипт работает нормально.
Если я изменяю код на следующий, он возвращает результаты
WHERE company_id LIKE '%1'
Все остальное работает нормально, кроме Select … where… этот конкретный столбец ‘company_id’ РАВЕН значению.
Я не имею понятия, в чем проблема. Я предполагаю, что это связано с моей базой данных.
Я проверил другие столбцы, другие значения переменных, разные операторы, и все работает, кроме этого конкретного столбца с использованием знака =.
В таблице нет пробелов в значении. Все значения – это целые числа.
ИЗМЕНЕНИЕ: Вот точный код, который я сейчас запускаю:
<?php
require_once('db-connect.php');
$query1 = "SELECT company FROM company_reg WHERE company_id = 1";
$result1 = mysqli_query($con, $query1);
$row1 = mysqli_fetch_array($result1, MYSQLI_NUM);
while($row1 = mysqli_fetch_array($result1, MYSQLI_NUM))
{
echo $row1[0];
}
?>
Если я изменяю столбец ‘company_id’ на ‘region’, код работает нормально.
Ответ или решение
На основании предоставленного вами описания проблемы с использованием оператора "=" для выборки по столбцу "company_id" в MySQL, давайте рассмотрим несколько возможных причин и решений.
Возможные причины проблемы:
-
Тип данных: Убедитесь, что тип данных столбца
company_id
в базе данных действительно является целым числом (например,INT
). Если, например, столбец был неправильно определён как строковый тип, это может вызывать неожиданные проблемы. -
Кодировка и формат данных: Иногда данные могут быть сохранены в формате, который отличается от ожидаемого. Например, значение может включать скрытые символы или пробелы, что делает его не сопоставимым с числом. Возможно, стоит произвести очистку или преобразование данных.
-
Ошибки в запросе: Убедитесь, что запрос правильно выполняется. Проверьте значение
company_id
, чтобы убедиться, что оно действительно существует в таблицеcompany_reg
. Вы можете попробовать выполнить простой запрос, который возвращает все значенияcompany_id
:SELECT DISTINCT company_id FROM company_reg;
-
Запрос в PHP: В вашем коде вы используете дважды функцию
mysqli_fetch_array
, что может привести к неправильной обработке результатов. Первое извлечение результатов приводит к тому, что при выполненииwhile
результаты уже не будут доступны. В результате ваш скрипт не выводит ничего. Вам нужно исправить это следующим образом:<?php require_once('db-connect.php'); $query1 = "SELECT company FROM company_reg WHERE company_id = 1"; $result1 = mysqli_query($con, $query1); if ($result1) { while($row1 = mysqli_fetch_array($result1, MYSQLI_NUM)) { echo $row1[0]; } } else { echo "Ошибка запроса: " . mysqli_error($con); } ?>
Рекомендованные шаги по исправлению:
-
Проверка в базе данных: Проверьте в таблице
company_reg
, есть ли строка сcompany_id = 1
. Вы можете выполнить SQL-запрос напрямую черезphpMyAdmin
или другой инструмент управления базами данных:SELECT * FROM company_reg WHERE company_id = 1;
-
Диагностика с использованием PHP: Если запрос возвращает пустой результат, добавьте вывод для проверки возможных ошибок:
if (mysqli_num_rows($result1) > 0) { while($row1 = mysqli_fetch_array($result1, MYSQLI_NUM)) { echo $row1[0]; } } else { echo "Компания с company_id = 1 не найдена."; }
-
Проверьте наличие дополнительных записей: Убедитесь, что нет дубликатов или несоответствий для других
company_id
и что у вас нет других условий, ограничивающих выборку. -
Изменение запросов на более простые: Если проблема сохраняется, попробуйте временно изменить запрос, чтобы он не использовал первое значение:
$query1 = "SELECT company FROM company_reg WHERE company_id = (SELECT MIN(company_id) FROM company_reg)";
Применив указанные выше преобразования и диагностические проверки, вы сможете найти и устранить причину проблемы с запросом по столбцу company_id
. Если же проблема продолжает проявляться, рекомендуется проверить логи MySQL и PHP на наличие дополнительных ошибок или исключений.