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
Форумы портала PHP.SU :: Версия для печати :: INSERT
Форумы портала PHP.SU » » Работа с СУБД » INSERT

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

1. 8Apollon8 - 12 Февраля, 2015 - 15:47:38 - перейти к сообщению
Всем Прывет!
Граждане программисты, подскажите новичку, почему при опечатке в запросе:
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 начальных образовалась пустота. Так дайте ж ссылку на материал, который заполнит эту брешь.
Ммм да... пора сделать перерыв... Подмигивание
2. Sail - 12 Февраля, 2015 - 15:56:47 - перейти к сообщению
8Apollon8 пишет:
Ну почеммуу???

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

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

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

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

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

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

и увидите.
5. 8Apollon8 - 12 Февраля, 2015 - 16:45:36 - перейти к сообщению
Sail пишет:
Вместо:
PHP:
скопировать код в буфер обмена
  1. else
  2.             return FALSE;

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

и увидите.


Спасибо еще раз! Я все правильно понял.

 

Powered by ExBB FM 1.0 RC1