Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вытаскивание данных из БД
 
 автор: Golovastik   (14.07.2010 в 00:25)   письмо автору
 
 

По аналогии для примера попробовал первый раз вытащить из БД данные через цикл, где-то увидел как в цикле выводятся.
Вот у меня есть такая БД.
 
 id      name            lastname                  dol
  1,     Алексей         Алексеев               Директор
  2,     Иван              Иванов               Заместитель
  3,     Александр      Александров      Программист


Такой код написал:

<?php
$db 
mysql_connect("localhost","alex","12345");
mysql_select_db("first_bd"$db);

$result mysql_query("SELECT  * FROM firma"$db);
$myrow mysql_fetch_array($result);

do{
echo 
"Сотрудник № - ".$myrow['id']."<br>";
echo 
$myrow['name']."<br>";
echo 
$myrow['lastname']."<br>";
echo 
$myrow['dol']."<br>";
}   while(
$myrow mysql_fetch_array($result));
?>


1)Не могу понять каким образом работает вот это условие:
 while($myrow = mysql_fetch_array($result));
Объясните пож.


2) Скажите ,каим образом переменная $myrow превращается в массив, после этой строки?

$myrow = mysql_fetch_array($result);


Заранее благодарю за ответ.

  Ответить  
 
 автор: Gubichev   (14.07.2010 в 00:29)   письмо автору
 
   для: Golovastik   (14.07.2010 в 00:25)
 

1) Условие TRUE до тех пор, пока не будет извлечён последний элемент массива
2) mysql_fetch_array($result) возвращает массив данных из выполненного запроса $result

  Ответить  
 
 автор: neadekvat   (14.07.2010 в 20:55)   письмо автору
 
   для: Gubichev   (14.07.2010 в 00:29)
 

1. А ничего, что с каждой итерацией меняются только данные, индексы же неизменны в ходе одного такого цикла.
2. mysql_fetch_array возвращает два массива. И это всегда стоит учитывать.

  Ответить  
 
 автор: mihdan   (14.07.2010 в 00:47)   письмо автору
 
   для: Golovastik   (14.07.2010 в 00:25)
 

do...while тут зачем?

  Ответить  
 
 автор: sms-send   (14.07.2010 в 00:55)   письмо автору
 
   для: Golovastik   (14.07.2010 в 00:25)
 

Оператор while выполняет цикл, пока результат выражения, переданного в скобках, равен логическому true.
У вас в выражении условия цикла записан оператор присваивания, который возвращает присвоенное значение как результат выражения. Функция mysql_fetch_array возвращает либо массив, содержащий значения полей очередного ряда результата запроса, либо булево false, если рядов больше нет. В случае, если возвращается массив, он приводится к булеву типу, согласно правилам. Любой непустой массив будет приведён к булеву true и цикл перейдёт на следующую итерацию. Если mysql_fetch_array вернёт false, то цикл остановится.

Более строгая форма записи условия выполнения цикла:
// <?php
while(false!==($myrow mysql_fetch_array($result)))


Цикл do{}while() выполнит своё тело 1 раз, даже в случае, если запрос вернул 0 рядов, поэтому нужно использовать цикл while(){}.


> 2) Скажите ,каим образом переменная $myrow превращается в массив, после этой строки?
Таким образом и превращается.. присваивается возвращаемое значение mysql_fetch_array - либо массив либо boolean.

  Ответить  
 
 автор: tvv123456   (14.07.2010 в 12:26)   письмо автору
 
   для: Golovastik   (14.07.2010 в 00:25)
 

Где-то я уже это видел :)
Вы тут используете только ассоциативный массив, дак незачем тогда использовать _array лучше будет _assoc

  Ответить  
 
 автор: Golovastik   (14.07.2010 в 20:08)   письмо автору
 
   для: tvv123456   (14.07.2010 в 12:26)
 

Скажите после вот этой строки:
$myrow = mysql_fetch_assoc($result);


Переменная myrow содержит в себе всю строку? Если у меня таблицы состоят из 3 столбцов, значит в переменную $myrow запишется первая строка, ячейка 1(1столбец),ячейка 2 (2-ой столбец), ячека 3(3-ий столбец)?
Все 3 ячейки запишутся?

  Ответить  
 
 автор: psychomc   (14.07.2010 в 20:42)   письмо автору
 
   для: Golovastik   (14.07.2010 в 20:08)
 

переменная $myrow в этом случае будет содержать ассоциативный массив с количеством элементов равным количеству полей возвращаемых запросом

p.s можете проверить сами
<?php
echo '<pre>';
print_r($myrow);
exit();

  Ответить  
 
 автор: Golovastik   (14.07.2010 в 21:27)   письмо автору
 
   для: psychomc   (14.07.2010 в 20:42)
 

Все 3 ячейки запишутся? или всё зависит от запроса описанного в функции mysql_query?

  Ответить  
 
 автор: sms-send   (14.07.2010 в 22:43)   письмо автору
 
   для: Golovastik   (14.07.2010 в 21:27)
 

Запишется весь очередной доступный ряд. Если в запросе выбирается 3 "ячейки", значит 3.

  Ответить  
 
 автор: psychomc   (14.07.2010 в 23:19)   письмо автору
 
   для: Golovastik   (14.07.2010 в 21:27)
 

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

  Ответить  
 
 автор: tvv123456   (14.07.2010 в 23:53)   письмо автору
 
   для: Golovastik   (14.07.2010 в 21:27)
 

вы почитайте что такое
mysql_fetch_assoc
mysql_fetch_row
И в конце уже mysql_fetch_array

или всё зависит от запроса описанного в функции mysql_query?

Да от этого тоже многое зависит:


<?
$result 
mysql_query("SELECT  * FROM firma"$db);
$row mysql_fetch_assoc($result);
print_r($row);
echo 
"<br>Второй вариант</br>";
$result mysql_query("SELECT  id,name FROM firma"$db);
$row mysql_fetch_assoc($result);
print_r($row);




Ну и посмотрите разницу что попало в итоге в массивы. Также можете эксперементировать со всеми приведенными выше функциями

  Ответить  
 
 автор: Golovastik   (16.07.2010 в 02:28)   письмо автору
 
   для: tvv123456   (14.07.2010 в 23:53)
 

Попробовал написать отдельно, для експеримента ещё раз, перестало работать. У меня база данных pinokio таблица pena.

nomer name lastname dol
1 Иванов Александр Инженер

Вот тренировочный код не сработал, выдал такую ошибку при заполнении формы и отправки в файл bd.php



Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in z:\home\xai.loc\www\bd.php on line 24


bd.php


<?php

if(isset($_POST['im']))
{
  
$im $_POST['im'];
}

if(isset(
$_POST['fam']))
{
  
$fam $_POST['fam'];
}


if(isset(
$_POST['otch']))
{
  
$otch $_POST['otch'];
}


$db mysql_connect("localhost","alex","12345");
mysql_select_db("pinokio",$db);
$result mysql_query("insert into pena(2,im,fam,otch) VALUES($im,$fam,$otch)",$db);

$my_result mysql_fetch_assoc($result);

echo 
$my_result['im'];


?>



Файл send_form.php

<html><head><title>Сайт</title>
<link rel="stylesheet" type="text/css" href="stili.css">
</head>
<body>
<form action="bd.php" method="post" name="n">
<b id="oop">Введите </b> <b id="tata">имя</b><input type="text" name="im">
<p id="vvv">
Введите <span id="salo">фамилию  <input type="text" name="fam"></span>
<br><p id="vvv">
Введите <span id="xleb">должность <input type="text" name="otch" ></span>
<br>
<p id="vvv">
<input name="knopka" type="submit" value="Записать в базу данных" >
</form>
</body>
</html>



stili.css

b#oop{color:#FF0000;}
b#tata{padding-right:1.4cm; }
span#salo{word-spacing:20px;}
span#xleb{word-spacing:10px;}
p#vvv{line-height:50px}

  Ответить  
 
 автор: Лена   (16.07.2010 в 10:37)   письмо автору
 
   для: Golovastik   (16.07.2010 в 02:28)
 

Запрос не срабатывает.
Надо делать вывод запроса и ошибки на экран:

$result = "insert into pena(2,im,fam,otch) VALUES($im,$fam,$otch)"; 
$res = mysql_query($result);
if(!$res) exit("Error in " . $result . mysql_error());

  Ответить  
 
 автор: sms-send   (16.07.2010 в 10:58)   письмо автору
 
   для: Golovastik   (16.07.2010 в 02:28)
 

Во-первых, количество полей и количество значений в insert-запросе не совпадают, а должны.
Во-вторых, на все модифицирующие запросы (insert/update/delete) функция mysql_query возвращает boolean, а mysql_fetch_assoc принимает первым аргументом resource типа "mysql result".

  Ответить  
 
 автор: Golovastik   (16.07.2010 в 17:14)   письмо автору
 
   для: sms-send   (16.07.2010 в 10:58)
 

Написал так, и всё равно выдаёт ошибку:
[CODE]Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in z:\home\xai.loc\www\bd.php on line 26
[/CODE]

[CODE]
<?php

if(isset($_POST['im']))
{
$im = $_POST['im'];
}

if(isset($_POST['fam']))
{
$fam = $_POST['fam'];
}


if(isset($_POST['otch']))
{
$otch = $_POST['otch'];
}


$db = mysql_connect("localhost","alex","12345");
mysql_select_db("pinokio",$db);


$result = mysql_query("insert into pena(id,im,fam,otch) VALUES('',$im,$fam,$otch)");

$my_result = mysql_fetch_assoc($result);

echo $my_result['im'];

?>
[/CODE]

  Ответить  
 
 автор: sms-send   (16.07.2010 в 17:15)   письмо автору
 
   для: Golovastik   (16.07.2010 в 17:14)
 

> Во-вторых, на все модифицирующие запросы (insert/update/delete) функция mysql_query возвращает boolean, а mysql_fetch_assoc принимает первым аргументом resource типа "mysql result".

  Ответить  
 
 автор: tvv123456   (16.07.2010 в 17:37)   письмо автору
 
   для: Golovastik   (16.07.2010 в 02:28)
 

>$result = mysql_query("insert into pena(2,im,fam,otch) VALUES($im,$fam,$otch)",$db);
>$my_result = mysql_fetch_assoc($result);

Это что-то новенькое.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования