Телефон: +7 (926) 245-03-63

Как на PHP сделать SELECT к данным базы данных MySQL?

Как на PHP сделать SELECT к данным базы данных MySQL
Как на PHP сделать SELECT к данным базы данных MySQL

Следующая статья: Как подобрать ключевые слова на PHP?

mysql, select, value, index, name, echo, param, selected, link

Содержание

Создание таблицы в MySQL

Решение: Для примера создадим таблицу «country» для хранения названий стран и соответствующего им кода ISO (полагается что база данных «testbase» уже создана):

CREATE TABLE country (
country_id smallint(6) NOT NULL auto_increment,
country_iso_code char(2) NOT NULL,
country_name varchar(60) NOT NULL,
PRIMARY KEY (country_id),
UNIQUE country_id (country_id, country_iso_code, country_name),
KEY country_id_2 (country_id, country_iso_code, country_name)
);

Внесение данных в MySQL средствами PHP

Теперь, занесем в нее немножко данных:

<?php
$country=array();// Ассоциативный массив где: индекс=код ISO, значение=страна
$country['AF']='Afghanistan';
$country['AL']='Albania';
$country['DZ']='Algeria';
$country['AD']='Andorra';
$country['AO']='Angola';
$country['AQ']='Antarctica';
$country['AR']='Argentina';
$country['AM']='Armenia';
$country['AU']='Australia';
$country['AT']='Austria';
$country['AZ']='Azerbaijan';
$country['BS']='Bahamas';
$country['BH']='Bahrain';
$country['BD']='Bangladesh';
$country['BY']='Belarus';
$country['BE']='Belgium';
$country['BJ']='Benin';
$country['BM']='Bermuda';
$country['BT']='Bhutan';
$country['BO']='Bolivia';
$country['BA']='Bosnia-Herzegovinia';
$country['BW']='Botswana';
$country['BR']='Brazil';
$country['BN']='Brunei Darussalam';
$country['BG']='Bulgaria';
$country['BF']='Burkina Faso';
$country['BI']='Burundi';
$country['KH']='Cambodia';
$country['CM']='Cameroon';
$country['CA']='Canada';
$country['CV']='Cape Verde';
$country['CF']='Central African Republic';
$country['TD']='Chad';
$country['CL']='Chile';
$country['CN']='China';
$country['CO']='Colombia';
$country['KM']='Comoros';
$country['CG']='Congo';
$country['CR']='Costa Rica';
$country['HR']='Croatia';
$country['CU']='Cuba';
$country['CY']='Cyprus';
$country['CZ']='Czech Republic';
$country['DK']='Denmark';
$country['DJ']='Djibouti';
$country['DO']='Dominikanische Republik';
$country['EC']='Ecuador';
$country['EG']='Egypt';
$country['SV']='El Salvador';
$country['GQ']='Equatorial Guinea';
$country['EE']='Estonia';
$country['ET']='Ethiopia';
$country['FЦ']='Faroe Islands';
$country['FI']='Finland';
$country['FR']='France';
$country['GF']='French Guiana';
$country['PF']='French Polynesia';
$country['GA']='Gabon';
$country['GM']='Gambia';
$country['GE']='Georgia';
$country['DE']='Germany';
$country['GH']='Ghana';
$country['GI']='Gibraltar';
$country['GR']='Greece';
$country['GL']='Greenland';
$country['GP']='Guadeloupe';
$country['GT']='Guatemala';
$country['GN']='Guinea';
$country['GW']='Guinea-Bissau';
$country['GY']='Guyana';
$country['HT']='Haiti';
$country['VA']='Holy See';
$country['HN']='Honduras';
$country['HK']='Hong Kong';
$country['HU']='Hungary';
$country['IS']='Iceland';
$country['IN']='India';
$country['id']='Indonesia';
$country['IQ']='Irak';
$country['IR']='Iran (Islamic Republic of)';
$country['IE']='Ireland';
$country['IL']='Israel';
$country['IT']='Italy';
$country['CI']='Ivory Coast';
$country['JM']='Jamaica';
$country['JP']='Japan';
$country['JO']='Jordan';
$country['KZ']='Kazakhstan';
$country['KE']='Kenya';
$country['KP']='Korea (democratic Peoples Republic of)';
$country['KR']='Korea (Republic of)';
$country['KW']='Kuwait';
$country['LA']='Laos ';
$country['LV']='Latvia';
$country['LB']='Lebanon';
$country['LS']='Lesotho';
$country['LR']='Liberia';
$country['LI']='Liechtenstein';
$country['LT']='Lithuania';
$country['LU']='Luxembourg';
$country['MO']='Macau';
$country['MG']='Madagascar';
$country['MW']='Malawi';
$country['MY']='Malaysia';
$country['MV']='Maldives';
$country['ML']='Mali';
$country['MT']='Malta';
$country['MQ']='Martinique';
$country['MR']='Mauritania';
$country['MU']='Mauritius';
$country['MX']='Mexiko';
$country['MD']='Modavia';
$country['MC']='Monaco';
$country['MN']='Mongolia';
$country['MA']='Morocco';
$country['MZ']='Mozambique';
$country['NA']='Namibia';
$country['NP']='Nepal';
$country['NL']='Netherlands';
$country['NC']='New Caledonia';
$country['NZ']='New Zealand';
$country['NI']='Nicaragua';
$country['NE']='Niger';
$country['NG']='Nigeria';
$country['NO']='Norway';
$country['PK']='Pakistan';
$country['PA']='Panama';
$country['PG']='Papua New Guinea';
$country['PY']='Paraguay';
$country['PE']='Peru';
$country['PH']='Philippines';
$country['PL']='Poland';
$country['PT']='Portugal';
$country['PR']='Puerto Rico';
$country['RO']='Romania';
$country['RU']='Russian Federation';
$country['RW']='Rwanda';
$country['SM']='San Marino';
$country['SA']='Saudi Arabia';
$country['SN']='Senegal';
$country['SC']='Seychelles';
$country['SL']='Sierra Leone';
$country['SG']='Singapore';
$country['SK']='Slovakia';
$country['SI']='Slovenia';
$country['SB']='Solomon Islands';
$country['SO']='Somalia';
$country['ZA']='South Africa';
$country['ES']='Spain';
$country['LK']='Sri Lanka';
$country['SD']='Sudan';
$country['SR']='Suriname';
$country['SZ']='Swaziland';
$country['SE']='Sweden';
$country['CH']='Switzerland';
$country['SY']='Syrian Arab Republic';
$country['TW']='Taiwan';
$country['TZ']='Tanzania';
$country['TH']='Thailand';
$country['MK']='The former Yugoslav Republic of Macedonia';
$country['TG']='Togo';
$country['TT']='Trinidad and Tobago';
$country['TN']='Tunisia';
$country['TR']='Turkey';
$country['UG']='Uganda';
$country['UA']='Ukraine';
$country['AE']='United Arab Emirates';
$country['GB']='United Kingdom';
$country['US']='United States';
$country['UY']='Uruguay';
$country['UZ']='Uzbekistan';
$country['VE']='Venezuela';
$country['VN']='Vietnam';
$country['YE']='Yemen';
$country['YU']='Yugoslavia';
$country['ZR']='Zaire';
$country['ZM']='Zambia';
$country['ZW']='Zimbabwe';
   
mysql_connect('localhost','','');// Не забудте изменить!
mysql_select_db('testbase');
while(list($key,$name)=each($country))
{ $sql='INSERT `country` SET `country_iso_code`="'.$key.'", `country_name`="'.$name.'"';
  $error=mysql_query($sql,$link);
  if (!$error)
  { echo '<pre>Ошибка ввода строки '.$key.':'.mysql_error($link).'</pre>';  
    die;// остановка работы скрипта
  }
}
echo 'Everything is nishtyak!';
?>

Основа PHP функции

Теперь, если все прошло без ошибок :), можно приступить к главному. Для начала решим в каком виде мы хотели бы видеть дискриптор <select>? Положим что вам быть не раз придется решать подобную задачу, да и просто ради удобства выделим наш код в отдельную функцию, которая будет находится в отдельном файле и подключаться по мере необходимости.

Назовем ее незатейливо - «select»:

<!-- select.inc.php -->

<?php
function select($result,$value_index=0,$text_index=1,$selected=1,$param=array())
// $result результат запроса SQL
// $value_index индекс в массиве для значения value (необязательный)
// $text_index индекс в массиве для текстового значения option (необязательный)
// $selected индекс в массиве для выбранного значения option (необязательный)
// $parametrs ассоциативный массив атрибутов дискриптора SELECT (необязательный)
{ echo '<select';
  if (isset($param))
  { // Добавляем переданные через массив атрибуты
    while (list($param_name,$param_value)=each($param))
    { if ($param_value=='multiple')// Здесь, по необходимости, можно добавить обработку JS
      { echo ' '.$param_value;
        continue;
      } 
      echo ' $param_name='.$param_value;   
    }
  }
  echo '>';
  while($row=mysql_fetch_row($result))
  { if ($row[$value_index]==$selected)
    { echo '<option value="'.$row[$value_index].' selected="selected">';
      echo $row[$text_index];
      echo '</option>'."\n";   
    }  
    echo '<option value="'.$row[$value_index].'>'.$row[$text_index].'</option>'."\n";  
  }  
  echo '</select>';   
}

Тест PHP функции

Теперь оттестируем нашу функцию:

<!-- test_select.php -->

<?php
include_once('select.inc.php');// Убедитесь, что оба файла находятся в одном каталоге
$host='localhost';// Не забудте изменить!
$user='';
$pass='';
$db='"testbase';
if (!$link=mysql_connect($host,$user,$pass))
{ echo 'Не могу соедениться с MySQL';
  die; 
}   
if (!mysql_select_db($db,$link))
{ echo 'Не могу выбрать базу '.$db.'. Ошибка: '.mysql_error($link);
  die;// остановка работы скрипта
}
if (!$r=mysql_query('SELECT * FROM country'))
{ echo 'Ошибка запроса '.mysql_error($link);
  die;// остановка работы скрипта
}

Выборка из таблицы MySQL

Теперь в переменной $r находится результат выборки из таблицы «country». Важно заметить, что в результате могут быть задействованы множество полей таблицы (в нашем случае 3), так как мы полагаем, что запрос используется не только для генерации нашей менюшки, но еще для каких-то целей; а нам для <select>`а нужно только 2, поэтому в качестве параметров фунции могут передаваться также и номера полей. Помните, что после SQL-запроса вида:

SELECT * FROM table_name

В результате, поля будут располагаться так, как они были расположены в таблице при ее создании (В нашем случае порядок такой: country_id country_iso_code country_name) Так что перед тем как передавать эти параметры, убедитесь в том, что вы представляете себе структуру вашей таблицы, либо не используйте (*) а перечисляйте поля ручками :) Можно,также использовать функции mysql_list_fields() , mysql_num_fields(), mysql_field_name(). По умолчанию установлены данные из 1-го поля для значения value, из второго - для текстового значения option.

echo '<form>';
// Передаем атрибуты, для подробной информации читайте спецификацию HTML
$discriptor_param=array(name=>'select_1',size=>'5',multiple);
$value_index=1;// то есть, для значения value выводить строки из поля country_iso_code
$text_index=2;// то есть, для текстового значения option выводит строки из поля country_name
$selected='RU';// установить выбранным опцию, где value='RU'
select($result,$value_index,$text_index,$selected,$discriptor_param);
echo '<br /><br />';
// И еще разок:
$discriptor_param=array(name=>'select_2');
$value_index=0;// то есть, для значения value выводить строки из поля country_id
$text_index=2;// то есть, для текстового значения option выводит строки из поля country_name
$selected='136';// установить выбранным опцию где value='136';
mysql_data_seek($result,0);// сбросим внутренний указатель результата
select($result,$value_index,$text_index,$selected,$discriptor_param);
echo '</form>';
mysql_free_result($result);// на любителя
mysql_close($link);// Также на любителя :)
?>

Можно также, доработать функцию и добавить в нее обработку переданного в качестве параметра javascript. Функция не совсем оптимальна, но главное, что она показывает как решать подобные задачи. Удачи!

Интересное в интернете: php mysql хостинг для разных сайтов