[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Хмм...пустая строка mysql
Renden
Доброго дня, я что-то подозреваю что пустая строка в таблице mysql и null это не 1 и тоже.
Просто когда происходит mysql update (значение пустое) в таблице значение с null меняется просто на пустую строку, помоему это нехорошо, или я парюсь?



Спустя 1 час, 30 минут, 22 секунды (16.03.2011 - 13:33) linker написал(а):
Конечно не одно и тоже. Пустая строка - это строка имеющая длину равную нулю. Если ты значения, полученные из базы не проверяешь is_null(), или в запросах не используешь IFNULL, ISNULL, NOT NULL то не стоит париться.

Спустя 15 минут, 49 секунд (16.03.2011 - 13:49) Renden написал(а):
linker
А если использую, то как тогда заставить update не обновлять строку?
ну типа:

//даже если ни одна проверка не сработает, переменные будут пустыми же, и он обновит на пустоту, я правильно понимаю?
if (!empty($_POST['email']))
$email = check(trim($_POST['email']));
if (!empty($_POST['phone']))
$phone = check(trim($_POST['phone']));
if (!empty($_POST['mobphone']))
$mobphone = check(trim($_POST['mobphone']));

mysql_query("UPDATE users SET email='$email', phone='$phone', mobphone='$mobphone' WHERE id='$Uid'");

Спустя 1 час, 2 минуты, 20 секунд (16.03.2011 - 14:51) Trianon написал(а):
$sqlset = array();

if (!empty($_POST['email']))
$sqlset[] = "email = '".mysql_real_escape_string(check(trim($_POST['email'])))."'";
if (!empty($_POST['phone']))
$sqlset[] = "phone = '".mysql_real_escape_string(check(trim($_POST['phone'])))."'";
if (!empty($_POST['mobphone']))
$sqlset[] = "mobphone = '".mysql_real_escape_string(check(trim($_POST['mobphone'])))."'";

if(!empty($sqlset))
{
$sqlset = implode(", ", $sqlset)
$sql = "UPDATE users SET $sqlset WHERE id = '".mysql_real_escape_string($Uid)."'";
mysql_query($sql) or die("Error in sql:<br>$sql<br> ".mysql_error()) ;
}

Спустя 20 минут, 33 секунды (16.03.2011 - 15:12) Renden написал(а):
Trianon
Ясно спс, кстати функция check() какраз и делает mysql_real_escape_string, кстати, еще 2 вопроса:
1) если я делаю так $id = (int)$_POST['id']; - Т.е говорю что id целое число, нужна ли защита от кавычек и тп в этом случае?
2) Допустим из базы вывожу $row['middlename'](отчество), но мне нужна только 1 буква, substr() что-то не хочет с русским работать (кодировка базы и вывода utf-8), как быть?

Спустя 18 минут, 34 секунды (16.03.2011 - 15:30) alex12060 написал(а):
У substr() есть эквивалент в mb_string

НЕ помню точное название)

Спустя 10 минут, 20 секунд (16.03.2011 - 15:41) Renden написал(а):
alex12060
Грац, спс, а по 1 вопросу незнаешь?)

Спустя 4 минуты, 23 секунды (16.03.2011 - 15:45) Trianon написал(а):
0) где-то в check её быть рано.
Тем паче, что само название check не предполагает внесения изменений в содержимое. Ну да Ваше дело.

1) если у Вас явно число подставляется, там не только escape_string, там сами апострофы вокруг числа не нужны.

И поскольку у Вас апострофы как раз стояли, я не имел права на допущение, что в $Uid может быть лишь целое число,
а иначе бы сам написал $sql = "UPDATE users SET $sqlset WHERE id = " . (int)$Uid;

2) mb_substr (лучше c явным указанием кодировки)

Спустя 4 минуты, 21 секунда (16.03.2011 - 15:49) neadekvat написал(а):
Цитата (Trianon @ 16.03.2011 - 15:45)
лучше c явным указанием кодировки

Еще есть вариант установить кодировку где-нибудь в начале работы скрипта, если используется много mb_*, чтобы постоянно не указывать ее.
mb_internal_encoding('UTF-8');

Спустя 24 минуты, 36 секунд (16.03.2011 - 16:14) Trianon написал(а):
neadekvat,
так даже предпочтительней.

Спустя 1 год, 3 месяца, 9 часов, 33 минуты, 50 секунд (17.06.2012 - 00:48) Телевизор написал(а):
Trianon
спасибо за примерчик,
тажа фигня парился и парился
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.