MySQL возвращает все строки с пустой строкой как предложение where - PullRequest
7 голосов
/ 04 октября 2011

Я обнаружил эту проблему при отладке активной записи CodeIgniter, как показано ниже:

$this->db->from("table_name");
$this->db->where("field_name", "");
$result = $this->db->get()->result_array();

Результирующий запрос:

SELECT * FROM `table_name` WHERE `field_name` = 0;  // Returns all rows in table

Даже если пустая строка приведена к 0, мы ожидаем пустой результат, так как table_name. field_name полон непустых строковых значений. Тем не менее, я получаю всю таблицу из этого запроса. Кто-нибудь понимает почему? Это совсем не интуитивно понятно.

Я пробовал запрос без приведения к 0, и он работает:

SELECT * FROM `table_name` WHERE `field_name` = "";  // Empty result

Почему приведение к 0?


РЕДАКТИРОВАТЬ: То же приведение к 0 происходит с этим альтернативным синтаксисом CodeIgniter:

$this->db->query('SELECT * FROM table_name WHERE field_name = ?', array(""));

1 Ответ

1 голос
/ 04 октября 2011

Попробуйте использовать следующее, если вы используете codeigniter:

$this->db->where("field_name = ''");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...