Пустая строка в не - пустой столбец в MySQL?

Возможно, вы скопировали код с этой страницы. https://www.w3schools.com/php/php_mysql_select.asp

  • . Вы не определили переменную $connection в своем коде (возможно, это намеренный подход к безопасности).
  • В вашем уведомлении говорится, что вы пытаетесь получить свойство num_rows от объекта $resultuser, но в этом запросе $resultuser не является объектом из-за каких-либо ошибок / ошибок в вашем запросе, потому что query () возвращает FALSE в случае неудачи и возражать против успеха.
  • Для подтверждения вы можете проверить свой набор результатов с помощью var_dump ();
  • Замените эту строку, если $ resultuser-> num_rows > 0 на
    ( ! empty ($ resultuser-> num_rows) & amp; & ($ resultuser-> num_rows> 0)))

12
задан Scott Weldon 5 June 2015 в 23:55
поделиться

6 ответов

Это походит на проблему с MDB2 API, теребящим утку PHP, вводящую семантику. Поскольку пустая строка в PHP эквивалентна ПУСТОМУ УКАЗАТЕЛЮ, MDB2, вероятно, неправильно обрабатывает с ним как таковой. Идеальное решение состояло бы в том, чтобы найти обходное решение для него в, он - API, но я не чрезмерно знаком с ним.

Одна вещь, которую необходимо рассмотреть, тем не менее, состоит в том, что пустой строкой в SQL не является Нулевое значение. Можно вставить их в строки, объявил 'NOT NULL' очень хорошо:

mysql> CREATE TABLE tbl( row CHAR(128) NOT NULL );
Query OK, 0 rows affected (0.05 sec)

mysql> INSERT INTO tbl VALUES( 'not empty' ), ( '' );
Query OK, 2 rows affected (0.02 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> SELECT row, row IS NULL FROM tbl;
+-----------+-------------+
| row       | row IS NULL |
+-----------+-------------+
| not empty |           0 | 
|           |           0 | 
+-----------+-------------+
2 rows in set (0.00 sec)

mysql> INSERT INTO tbl VALUES( NULL );
ERROR 1048 (23000): Column 'row' cannot be null

Если Вы не можете найти (или реализация) обходное решение в MDB2 API, одно hackish решение (хотя немного лучше, чем тот Вы в настоящее время используете), мог бы быть должен определить пользовательскую переменную для пустой строки-

SET @EMPTY_STRING = "";
UPDATE tbl SET row=@EMPTY_STRING;

Наконец, если необходимо использовать пустую строку в операторе INSERT, но найти себя неспособными к, значение по умолчанию для строковых типов в MySQL является пустой строкой. Таким образом, Вы могли просто опустить столбец от оператора INSERT, и он автоматически установить на пустую строку (если столбец имеет ограничение NOT NULL).

12
ответ дан 2 December 2019 в 04:43
поделиться

Я смущен. Похоже на использование mysqli OO (от тегов и стиля), но синтаксис отличается, чем руководство по php.net, в котором говорится, чтобы сделать это вместо этого:

$query = "INSERT INTO mytable SET somevarchar = ?";
$value = "";
$prepared = $db->prepare($query);
$prepared->bind_param("s", $value);
$result = $prepared->execute();
-1
ответ дан 2 December 2019 в 04:43
поделиться

Не делает пустого множества кавычек, "" это?

0
ответ дан 2 December 2019 в 04:43
поделиться

Благодаря некоторым ответам я понял, что проблема может быть в MDB2 API, а не в PHP или самих командах MySQL. Конечно же, я нашел это в MDB2 FAQ:

  • Почему пустые строки заканчиваются как ПУСТОЙ УКАЗАТЕЛЬ в базе данных? Почему я получаю ПУСТОЙ УКАЗАТЕЛЬ, не позволенный в текстовых полях NOT NULL eventhough, значение по умолчанию""?
    • Проблема состоит в том, что для некоторого RDBMS (больше всего noteably Oracle) пустая строка является ПУСТОЙ. Поэтому MDB2 предоставляет возможность мобильности осуществлять то же поведение на всем RDBMS.
    • Так как все опции мобильности включены по умолчанию, необходимо будет отключить опцию, если Вы не хотите иметь это поведение: $mdb2-> setOption ('мобильность', MDB2_PORTABILITY_ALL ^ MDB2_PORTABILITY_EMPTY_TO_NULL);

Благодаря всем, кто предоставил вдумчивые ответы.

17
ответ дан 2 December 2019 в 04:43
поделиться

Я понимаю, что на этот вопрос в значительной степени дан ответ и ушел на пенсию, но я нашел его, когда искал ответы на похожую ситуацию, и я не могу удержаться от того, чтобы бросить свою шляпу на ринге.

Не зная, к чему относится столбец NULL / "", я не могу знать, как истинный значение пустой строки. Означает ли пустая строка что-то само по себе (например, если бы я убедил судью разрешить мне изменить мое имя на просто ничто, я был бы очень раздражен, если бы мое имя появилось в моих водительских правах как NULL. Моё имя было бы!

Однако пустая строка (или пустая, или ничто, являющееся ЧТО-ТО, а не просто отсутствие чего-либо (например, NULL)) также может просто означать «NOT NULL» или «

2
ответ дан 2 December 2019 в 04:43
поделиться

Я нашел решение!

MDB2 преобразует пустые строки в NULL, поскольку опция переносимости MDB2_PORTABILITY_EMPTY_TO_NULL включена по умолчанию (благодаря Oracle, который считает пустые строки нулевыми).

Отключите эти параметры при подключении к базе данных:

$options = array(
    'portability' => MDB2_PORTABILITY_ALL ^ MDB2_PORTABILITY_EMPTY_TO_NULL
);
$res= & MDB2::connect("mysql://user:password@server/dbase", $options);
1
ответ дан 2 December 2019 в 04:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: