|
|
|
| По аналогии для примера попробовал первый раз вытащить из БД данные через цикл, где-то увидел как в цикле выводятся.
Вот у меня есть такая БД.
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);
|
Заранее благодарю за ответ. | |
|
|
|
|
|
|
|
для: Golovastik
(14.07.2010 в 00:25)
| | 1) Условие TRUE до тех пор, пока не будет извлечён последний элемент массива
2) mysql_fetch_array($result) возвращает массив данных из выполненного запроса $result | |
|
|
|
|
|
|
|
для: Gubichev
(14.07.2010 в 00:29)
| | 1. А ничего, что с каждой итерацией меняются только данные, индексы же неизменны в ходе одного такого цикла.
2. mysql_fetch_array возвращает два массива. И это всегда стоит учитывать. | |
|
|
|
|
|
|
|
для: Golovastik
(14.07.2010 в 00:25)
| | do...while тут зачем? | |
|
|
|
|
|
|
|
для: 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. | |
|
|
|
|
|
|
|
для: Golovastik
(14.07.2010 в 00:25)
| | Где-то я уже это видел :)
Вы тут используете только ассоциативный массив, дак незачем тогда использовать _array лучше будет _assoc | |
|
|
|
|
|
|
|
для: tvv123456
(14.07.2010 в 12:26)
| | Скажите после вот этой строки:
$myrow = mysql_fetch_assoc($result);
|
Переменная myrow содержит в себе всю строку? Если у меня таблицы состоят из 3 столбцов, значит в переменную $myrow запишется первая строка, ячейка 1(1столбец),ячейка 2 (2-ой столбец), ячека 3(3-ий столбец)?
Все 3 ячейки запишутся? | |
|
|
|
|
|
|
|
для: Golovastik
(14.07.2010 в 20:08)
| | переменная $myrow в этом случае будет содержать ассоциативный массив с количеством элементов равным количеству полей возвращаемых запросом
p.s можете проверить сами
<?php
echo '<pre>';
print_r($myrow);
exit();
|
| |
|
|
|
|
|
|
|
для: psychomc
(14.07.2010 в 20:42)
| | Все 3 ячейки запишутся? или всё зависит от запроса описанного в функции mysql_query? | |
|
|
|
|
|
|
|
для: Golovastik
(14.07.2010 в 21:27)
| | Запишется весь очередной доступный ряд. Если в запросе выбирается 3 "ячейки", значит 3. | |
|
|
|
|
|
|
|
для: Golovastik
(14.07.2010 в 21:27)
| | лучше меньше спрашивайте, а больше читайте мануал, экспериментируйте, выводите на экран. быстрее научитесь | |
|
|
|
|
|
|
|
для: 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);
|
Ну и посмотрите разницу что попало в итоге в массивы. Также можете эксперементировать со всеми приведенными выше функциями | |
|
|
|
|
|
|
|
для: 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}
|
| |
|
|
|
|
|
|
|
для: 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());
|
| |
|
|
|
|
|
|
|
для: Golovastik
(16.07.2010 в 02:28)
| | Во-первых, количество полей и количество значений в insert-запросе не совпадают, а должны.
Во-вторых, на все модифицирующие запросы (insert/update/delete) функция mysql_query возвращает boolean, а mysql_fetch_assoc принимает первым аргументом resource типа "mysql result". | |
|
|
|
|
|
|
|
для: 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] | |
|
|
|
|
|
|
|
для: Golovastik
(16.07.2010 в 17:14)
| | > Во-вторых, на все модифицирующие запросы (insert/update/delete) функция mysql_query возвращает boolean, а mysql_fetch_assoc принимает первым аргументом resource типа "mysql result". | |
|
|
|
|
|
|
|
для: 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);
Это что-то новенькое. | |
|
|
|