Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: INSERT

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Ошибка в написании значении
8Apollon8
Отправлено: 12 Февраля, 2015 - 15:47:38
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




Всем Прывет!
Граждане программисты, подскажите новичку, почему при опечатке в запросе:
PHP:
скопировать код в буфер обмена
  1. ...VALUES('$name', $phoneeeee, $ageeeee)"

функции (типы name = varchar; phone, age = int):
PHP:
скопировать код в буфер обмена
  1. function newContact($name, $phone, $age){
  2.         $query = "INSERT INTO test (name, phone, age) VALUES('$name', $phone, $age)";
  3.         $res = mysql_query($query);
  4.        
  5.                 if(mysql_affected_rows() > 0){
  6.                         return TRUE;
  7.                                
  8.                 }
  9.                 else
  10.                         return FALSE;          
  11. }

Она вернет false.
Но если я опечатаюсь так:
PHP:
скопировать код в буфер обмена
  1. ...VALUES('$nameeeee', $phone, $age)";
,
то функция вернет true и в поле name добавит пустую строку.
Или так:
PHP:
скопировать код в буфер обмена
  1. ...VALUES('$name', '$phoneeeee', '$ageeeee')";

функция вернет true и в полях phone и age добавятся нули.
Ну почеммуу??? Однако
(Добавление)
В знаниях моих о PHP начальных образовалась пустота. Так дайте ж ссылку на материал, который заполнит эту брешь.
Ммм да... пора сделать перерыв... Подмигивание
 
 Top
Sail
Отправлено: 12 Февраля, 2015 - 15:56:47
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




8Apollon8 пишет:
Ну почеммуу???

Особенности обработки неинициализированных переменных.
Цитата:
Хотя в PHP и нет необходимости инициализировать переменные, это считается очень хорошей практикой. Неинициализированные переменные принимают значение по умолчанию в зависимости от их типа, который определяется из контекста их первого использования: булевы принимают значение FALSE, целые и числа с плавающей точкой - ноль, строки (например, при использовании в echo) - пустую строку, а массивы становятся пустыми массивами.

И, кстати:
Цитата:
В случае работы с неинициализированной переменной вызывается ошибка уровня E_NOTICE, за исключением случая добавления элементов в неинициализированный массив. Для обнаружения инициализации переменной может быть использована языковая конструкция isset().
 
 Top
8Apollon8
Отправлено: 12 Февраля, 2015 - 15:59:49
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




Благодарю
(Добавление)
Sail пишет:
8Apollon8 пишет:
Ну почеммуу???

Особенности обработки неинициализированных переменных.
Цитата:
Хотя в PHP и нет необходимости инициализировать переменные, это считается очень хорошей практикой. Неинициализированные переменные принимают значение по умолчанию в зависимости от их типа, который определяется из контекста их первого использования: булевы принимают значение FALSE, целые и числа с плавающей точкой - ноль, строки (например, при использовании в echo) - пустую строку, а массивы становятся пустыми массивами.

И, кстати:
Цитата:
В случае работы с неинициализированной переменной вызывается ошибка уровня E_NOTICE, за исключением случая добавления элементов в неинициализированный массив. Для обнаружения инициализации переменной может быть использована языковая конструкция isset().

С нулями и пустыми строками все ясно. Основной вопрос почему же функция возвращает false.
Я полагаю, совершив опечатку '$nameeeee' php инициализирует ее как строковую переменную (она в кавычках значит строка), значение которой не задали, значит пустая строка . В случае же с опечатками $phoneeeee и $ageeeee php инициализирует их как неизвестные переменные, то есть
PHP:
скопировать код в буфер обмена
  1. ...VALUES('$name', $phoneeeee, $ageeeee)"
равносильно . А значит сам запрос не верный, потому и false.
Я правильно понимаю?
 
 Top
Sail
Отправлено: 12 Февраля, 2015 - 16:36:07
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




Вместо:
PHP:
скопировать код в буфер обмена
  1. else
  2.             return FALSE;

Напишите:
PHP:
скопировать код в буфер обмена
  1. else {
  2.   echo mysql_error().'<br>'.$query;
  3.   return FALSE;
  4. }

и увидите.
 
 Top
8Apollon8
Отправлено: 12 Февраля, 2015 - 16:45:36
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




Sail пишет:
Вместо:
PHP:
скопировать код в буфер обмена
  1. else
  2.             return FALSE;

Напишите:
PHP:
скопировать код в буфер обмена
  1. else {
  2.   echo mysql_error().'<br>'.$query;
  3.   return FALSE;
  4. }

и увидите.


Спасибо еще раз! Я все правильно понял.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB