[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: вопрос по mysql_fetch_array....
logic
Люди, обьясните пожалуйста,
как с этим разобраться, если я пишу

$query = mysql_query("SELECT am_id FROM table");
$row = mysql_fetch_assoc($query);
while ($row = mysql_fetch_assoc($query);) {
echo $row['am_id'];
}

то тогда скрипт в цикле не будет выводить значение первой выбранной из БД строчки.
Если же писать

$query = mysql_query("SELECT am_id FROM table");
while ($row = mysql_fetch_assoc($query);) {
echo $row['am_id'];
}

то все выведет отлично.
Вопрос этот появился от того что мне надо сделать INSERT в БД с помощью такого запроса

mysql_query("INSERT INTO table (firstname,am_id) VALUES ('$new_worker[0]', ' ".$row['am_id']." ') ");

$row['am_id'] - я получаю из запроса до INSERT, и я как бы знаю точно, что из БД всегда будет доставаться только одна запись.

вот такой код полностью:

$query = mysql_query("SELECT am_id FROM table");
$row = mysql_fetch_assoc($query);
mysql_query("INSERT INTO table (firstname,am_id) VALUES ('$new_worker[0]', ' ".$row['am_id'][0]." ') ");

правда ничего не вставляется :(




Спустя 9 минут, 50 секунд (9.05.2011 - 17:11) Игорь_Vasinsky написал(а):
чтобы контролировать кол-во строк н выводе - достаточно использовать LIMIT

Цитата
$query = mysql_query("SELECT `am_id` FROM `table` LIMIT 1");
- одна строка

Здесь же (в первом коде)

$query = mysql_query("SELECT am_id FROM table");
$row = mysql_fetch_assoc($query);
while ($row = mysql_fetch_assoc($query))
{
echo $row['am_id'];
}


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

По поводу ни чего не вставляется:

достаточно сделать вывод ошибки используя or die(mysql_error()); и всё станет понятно

mysql_query("INSERT INTO table (firstname,am_id) VALUES ('".$new_worker[0]."', '".$row['am_id'][0]."') ") or die(mysql_error());


Спустя 20 минут, 12 секунд (9.05.2011 - 17:31) alex12060 написал(а):
logic

Давай разберемся, я уже много раз объяснял эту особенность.

Смотри, что делает функция mysql_fetch_assoc()? !разные функции не влияют на конечный результат!
Она вытаскивает по дескриптору информацию из запроса. Итак, функция сработала. В одиночном виде она вытаскивает только 1 строку.

Вот, она вытащила эту строку. Потом ты начинаешь выводить:


while ($row = mysql_fetch_assoc($query)) {
echo $row['am_id'];
}


Но пойми, там уже нет первой строки, так как ты в первый раз вытащил ее по запросу.

Вот в чем причина, используй второй твой вариант.

Пошли далее.

Ты правильно предположил, должна вставиться одна запись в БД. Но ты напутал все и вся.


mysql_fetch_assoc() // Вытаскивает информацию из БД и использует имена таблиц как ключи в массиве.
mysql_fetch_row() // Вытаскивает информацию из БД, но использует в качестве ключей числа от 0 до N


Поэтому, в случает твоем тебе вместо этого:

$query = mysql_query("SELECT am_id FROM table");
$row = mysql_fetch_assoc($query);
mysql_query("INSERT INTO table (firstname,am_id) VALUES ('$new_worker[0]', ' ".$row['am_id'][0]." ') ");


Надо написать так:

$query = mysql_query("SELECT am_id FROM table") or die(mysql_error());
$row = mysql_fetch_assoc($query);
mysql_query("INSERT INTO table (`firstname`, `am_id`) VALUES ('".$new_worker[0]."', '".$row['am_id']."')") or die(mysql_error());


Вот и вся филькина грамота.

Спустя 2 минуты, 2 секунды (9.05.2011 - 17:33) inpost написал(а):
logic
Разобрался или мне ответить? smile.gif

Спустя 6 минут, 49 секунд (9.05.2011 - 17:40) alex12060 написал(а):
inpost

Давай и ты до кучи, может и я еще что-то новое узнаю smile.gif

Спустя 7 минут, 28 секунд (9.05.2011 - 17:48) ИНСИ написал(а):
Цитата
$new_worker[0]

Вроде все объяснили, но вот тут неверно. Так будет работать, но правильный синтаксис надо всегда помнить:

$new_worker['0']

Спустя 12 минут, 42 секунды (9.05.2011 - 18:00) alex12060 написал(а):
velbox


http://php.net/manual/ru/language.types.array.php

Там ни разу не написано как ты сказал.

Спустя 4 минуты, 4 секунды (9.05.2011 - 18:05) Игорь_Vasinsky написал(а):
ну это же числовой индекс, я всегда опускаю ковычки

Спустя 5 минут, 28 секунд (9.05.2011 - 18:10) ИНСИ написал(а):
alex12060 мда .... Почитай сам всю инфу, которая там написана, особенно остановить свое внимание на:
Цитата

// Неверно. Это работает, но из-за неопределенной константы с
// именем fruit также вызывает ошибку PHP уровня E_NOTICE
//
// Notice: Use of undefined constant fruit - assumed 'fruit' in...
print $arr[fruit];    // apple

Спустя 3 минуты, 50 секунд (9.05.2011 - 18:14) alex12060 написал(а):
Все, что ты написал выше - правильно, но прочитай в свою очередь про константы.

bool define ( string name, mixed value [, bool case_insensitive])

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

Спустя 1 минута, 31 секунда (9.05.2011 - 18:15) Rand написал(а):
velbox, не правильно писать строковый индекс без кавычек, по скольку PHP принимает это не за строку, а за константу. А числа нужно писать без кавычек.

Спустя 1 минута, 42 секунды (9.05.2011 - 18:17) ИНСИ написал(а):
alex12060 вот ты странный. Давай тогда предположим следующее:

В начале мы видим так:

$new_worker[0]


затем так:

$new_worker['long']


То есть, в одних местах, мы будем делать с ковычками, а в других без... и что за мусор получится? Надо придерживаться общих понятий.

Спустя 6 минут, 56 секунд (9.05.2011 - 18:24) Rand написал(а):
А я вот никого мусора тут не вижу. В первом примере число, во втором строка. Всё логично.

Если я вижу массив с индексом $arr[1] - я делаю выводы, что ключи этого массива только числовые. А если вижу $arr['1'], я делаю выводы, что это ассоциативный массив в котором кроме $arr['1'], $arr['2'] может быть и $arr['third'].

Спустя 30 секунд (9.05.2011 - 18:24) alex12060 написал(а):
velbox

Это по-моему принципы банальные. Каждому свое. Но фраза Надо придерживаться общих понятий немного настораживает. Что значит общее понятие? Где ты это вычитал?

Спустя 2 минуты, 31 секунда (9.05.2011 - 18:27) neadekvat написал(а):
Цитата (Rand @ 9.05.2011 - 19:24)
Если я вижу массив с индексом $arr[1] - я делаю выводы, что ключи этого массива только числовые. А если вижу $arr['1'], я делаю выводы, что это ассоциативный массив в котором кроме $arr['1'], $arr['2'] может быть и $arr['third'].

Не надо делать таких выводов.
В ассоциативном массиве ключи могут быть числовыми, не только сткроковыми. И к ним надо в любом случаи обращаться без кавычек. Потому что число - это константа. А константу не надо брать в кавычки.


velbox, ты опять радуешь своими знаниями и убеждениями.

Спустя 9 минут, 37 секунд (9.05.2011 - 18:37) Rand написал(а):
neadekvat, я то числа всегда пишу без кавычек, я имел ввиду, что в простом массиве (с числовыми индексами) не может быть строковых ключей. А в данном случае присутствие строкового ключа '1' сразу переводит массив из простого в разряд ассоциативного (хотя слышал, что в PHP все массивы по сути ассоциативные, логически так правильнее). Я не призывал писать в ассоциативном массиве числа в кавычках, как ты подумал.

Спустя 1 час, 29 минут, 59 секунд (9.05.2011 - 20:07) ИНСИ написал(а):
Цитата
velbox, ты опять радуешь своими знаниями и убеждениями.

А ты как всегда пытаешь показать, что знаешь больше чем другие.

Блин, парни. Я не сказал что это не правильно. Я сказал:
Цитата
Так будет работать


А далее сказал:
Цитата
но правильный синтаксис надо всегда помнить


Пояснил, что именно я имел в виду:
Цитата
Надо придерживаться общих понятий.


То есть писать так, чтобы было понятно ВСЕМ! Начинающий программист НИКОГДА не поймет в чем дело, если в одном месте без ковычек а в другом с ковычками. Посмотри начинающий прогер без ковычек и будет писать потом и строковые ключи без ковычек и будет ноутис.

Спустя 4 минуты, 7 секунд (9.05.2011 - 20:11) neadekvat написал(а):
Цитата (velbox @ 9.05.2011 - 21:07)
То есть писать так, чтобы было понятно ВСЕМ! Начинающий программист НИКОГДА не поймет в чем дело, если в одном месте без ковычек а в другом с ковычками. Посмотри начинающий прогер без ковычек и будет писать потом и строковые ключи без ковычек и будет ноутис.

WTF? Начинающий программист будет смотреть и видеть: числовые ключи в кавычки не обрамлясются, а строковые - обрамаляются, и будет делать также. А потом либо сам поймет, либо спросит, почему же именно так.
А писать код, исходя из того, чтобы новичкам было понятно.. Это смешно, право, мы же не об учебном коде говорим, а о рабочем.

Цитата (velbox @ 9.05.2011 - 21:07)
Блин, парни. Я не сказал что это не правильно.

А я утверждаю, что писать числовые в кавычках - это неправильно и не предполагаю обратного варианта.

Спустя 1 час, 16 минут, 27 секунд (9.05.2011 - 21:27) ИНСИ написал(а):
Цитата
Такой ошибки при числовых индексах не может быть по определению.

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

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

Спустя 2 часа, 11 минут, 51 секунда (9.05.2011 - 23:39) logic написал(а):
)))) горячо тут ))
Спасибо вам большое за все объяснения, сейчас ещё разок все прочитаю...И не знаю к кому себя отнести, к начинающим или к недумающим, но числовые ключи я пишу без ковычек, а строковые в ковычках )))

ребят спасибо большое, нашел у себя ошибку в коде, но ваши обьяснения очень полезны! rolleyes.gif

Спустя 12 часов, 54 минуты, 33 секунды (10.05.2011 - 12:34) inpost написал(а):
logic
числовые надо без кавычек, а ассоциативный массив - в кавычках.
Быстрый ответ:

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