PHP mysqli_real_escape_string преобразует пустую строку в один пробел - PullRequest
0 голосов
/ 26 июня 2018

Мое приложение работает нормально. Соединение с БД было открыто до вызова команд SQL в PHP.

Проблема в том, что некоторые параметры в форме ввода не заполнены, и после использования real_escape_string параметры хранят пустую строку в базе данных. Для столбцов базы данных по умолчанию установлено значение NULL.

Это ожидается? Я не могу найти ничего релевантного в документации PHP.

Можно ли просто сделать так, чтобы он хранил NULL?

Код указан ниже:

"INSERT INTO address SET firstname = '" . $mysqli->real_escape_string($data['firstname']) . "'";

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Вы, вероятно, должны отделить проверку данных от создания запроса. Это можно сделать следующим образом:

$firstName = strlen($data['firstname'])? "'".$mysqli->real_escape_string($data['firstname'])."'": "NULL";
$sql = "INSERT INTO address SET firstname = " . $firstName;

Это проверит, что $ data ['firstname'] содержит значение, и если нет, то используется Null. Затем он объединяется в ваш запрос, который вы затем выполните на следующем шаге.

Это ни в коем случае не единственный (или даже лучший) подход, но на основе предоставленного вами кода это должно дать вам начало.

0 голосов
/ 26 июня 2018

Ожидается, если вы скажете серверу использовать пустую строку, что вы и делаете. Вам нужно добавить некоторую логику в свой код, чтобы использовать null, когда строка пуста.

Кроме того, вы широко открыты для SQL-инъекций . Вам нужно использовать подготовленные операторы, а не объединять переменные в запросе. Экранирования не достаточно. См. Как я могу предотвратить внедрение SQL в PHP? .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...