MySQL возвращает все строки с пустой строкой в ​​качестве предложения where

Я обнаружил эту проблему при отладке активной записи 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 . имя_поля заполнено непустыми строковыми значениями. Однако я получаю всю таблицу из этого запроса. Кто-нибудь понимает, почему? Это совсем не интуитивно.

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

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

Почему преобразование в 0?


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

$this->db->query('SELECT * FROM table_name WHERE field_name = ?', array(""));
7
задан Anson Kao 6 October 2011 в 05:15
поделиться