Основы работы с базами данных SQL в PHP
|
|
| Дата: Пятница, 28.01.2011, 05:46 | Сообщение # 1 |
Группа: Администраторы
Сообщений: 1530
| Подключение к БД. Запрос таблицы и прогон по таблице ----------------------------- $host="localhost"; $bd_user="user"; $pass="pass"; $bd_name="bd_name"; $link = mysql_connect($host,$bd_user,$pass); mysql_select_db($bd_name, $link) or die(mysql_error()); $tab="tab_name"; $query = "SELECT * FROM `".$tab."`"; $res = mysql_query($query, $link); while($row = mysql_fetch_array($res)) { echo $row["0"]; // выведет всю 1ю колонку таблицы } mysql_close ($link);
|
|
| |
| Дата: Пятница, 28.01.2011, 05:56 | Сообщение # 2 |
Группа: Администраторы
Сообщений: 1530
| Запрос создания SQL таблицы онлайн: ----------------------------------------------- mysql_query("CREATE TABLE `".$bd_name."`.`".$tab_name."` ( `1` INT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'id', `2` TEXT NOT NULL COMMENT 'name', `3` TEXT NOT NULL COMMENT 'title', `4` INT NOT NULL COMMENT 'dop_num1', `5` INT NOT NULL COMMENT 'dop_num2') ENGINE = MyISAM CHARACTER SET utf8 COLLATE utf8_unicode_ci;"); -------------------------------------------------------- данный запрос создает таблицу из 5 полей(2 text+3 integer) Удаление таблицы делает команда DROP TABLE `".$tab_name."`
|
|
| |
| Дата: Пятница, 28.01.2011, 06:02 | Сообщение # 3 |
Группа: Администраторы
Сообщений: 1530
| Запрос редактирования ячейки SQL таблицы онлайн: ------------------------------------------------ mysql_query("UPDATE `".$bd_name."`.`".$tab_name."` SET `2` = 'page1' WHERE `".$tab_name."`.`1` =1;"); ------------------------------------------------ данный запрос присвоит ячейке по адресу (1-я строка, 2-я колонка) значение "page1"
|
|
| |
| Дата: Пятница, 28.01.2011, 06:06 | Сообщение # 4 |
Группа: Администраторы
Сообщений: 1530
| Запрос вставки новой строки в SQL таблицу онлайн: ---------------------------------------------------------------------------
mysql_query("INSERT INTO `".$bd_name."`.`".$tab_name."` (`1`, `2`, `3`, `4`, `5`) VALUES (NULL, 'name', 'title', 'discr', 'tags');");
Запрос на удаление строки в SQL таблице онлайн: ---------------------------------------------------------------------------
mysql_query("DELETE FROM `".$bd_name."`.`".$tab_name."` WHERE `".$tab_name."`.`1` = 1"); // данный запрос удалит первую строку из таблицы
если мы добавляем в поле данные с кавычками и слэшами следует обернуть переменную(данные) в addslashes($html)
|
|
| |
| Дата: Пятница, 28.01.2011, 06:20 | Сообщение # 5 |
Группа: Администраторы
Сообщений: 1530
| Сортировка SQL таблицы по возрастанию и убыванию ------------------------------------------------ $query = "SELECT * FROM `".$tab."` ORDER BY `".$tab_name."`.`1` ASC"; // по возрастанию по 1-й колонке $query = "SELECT * FROM `".$tab."` ORDER BY `".$tab_name."`.`2` DESC"; // по убыванию по 2-й колонке
|
|
| |
| Дата: Пятница, 28.01.2011, 06:37 | Сообщение # 6 |
Группа: Администраторы
Сообщений: 1530
| Ограничения на вывод результатов строк SQL таблицы "SELECT * FROM `".$tab_name."` LIMIT 10"; //выведет первые 10 строк "SELECT * FROM `".$tab_name."` LIMIT 0,10"; //выведет строки с 1й по10ю "SELECT * FROM `".$tab_name." WHERE `".$tab_name."`.`2` %like% 'name' //выведет все строки, во 2-й ячейке которых приcутствует фрагмент "name"
|
|
| |
| Дата: Понедельник, 04.06.2012, 22:46 | Сообщение # 7 |
Группа: Администраторы
Сообщений: 1530
| Новый(универсальный) метод подключения БД: myDatabase="BD"; $username="user"; $password="pass"; $pdo = new PDO('mysql:host=localhost;dbname=myDatabase', $username, $password);
-----------------------// подключение с защитой от ошибок try { $pdo = new PDO('mysql:host=localhost;dbname=myDatabase', $username, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $e) { echo 'ERROR: ' . $e->getMessage(); } -----------------------// подключение с защитой от ошибок
$data = $pdo->query('SELECT * FROM myTable WHERE name = ' . $conn->quote($name));
/* // выполнить действия с таблицей $stmt = $pdo->exec('INSERT INTO someTable (`name`) VALUES('name')'); */
foreach($data as $row) { echo $row['name']; } } catch(PDOException $e) { echo 'ERROR: ' . $e->getMessage(); }
--------------------------------------------------- Хорошо описано в http://www.lux-d.ru/2011/01/pdo-php-data-objects-and-mysql/
|
|
| |
| Дата: Воскресенье, 07.10.2012, 07:13 | Сообщение # 8 |
Группа: Администраторы
Сообщений: 1530
| Работа с LiteSQL
LiteSQL замечательна тем, что эта база хранится в файле и ее можно скачать по FTP, как любой другой файл, минусом является то, что править этот файл руками без специальных программ невозможно. Только выполнением SQL запросов.
Создание Базы данных и таблицы в LiteSQL
$db = sqlite_open("sample.sqlite"); //создаем пустой файл базы данных sqlite_close($db);
Создание таблицы и внесение в нее первой строки в LiteSQL
$db = sqlite_open("sample.sqlite"); $sql = "CREATE TABLE table ( id integer primary key, pole1 text, pole2 integer );"; sqlite_query($db, $sql); $sql = "INSERT INTO table VALUES(1,'Pole1',1)"; //в последующих строках первой ячейке присваиваем NULL, так как она самозаполняется sqlite_query($db, $sql); sqlite_close($db);
Добавление записи в таблицу LiteSQL
$db = sqlite_open("mydb.sqlite"); $sql = "INSERT INTO table VALUES(NULL, 'text', 'text',data,number)"; //устанавливаются значения для всех полей новой строки sqlite_query($db, $sql); sqlite_close($db);
Удаление строки(записи) из таблицы LiteSQL
$db = sqlite_open("mydb.sqlite"); $sql = "DELETE FROM table WHERE ID=[номер строки]"; sqlite_query($db, $sql); sqlite_close($db);
Чтение таблицы LiteSQL
$db = sqlite_open("mydb.sqlite"); $sql = "select * from table order by ID desc"; $res = sqlite_query($db, $sql);
while ($row = sqlite_fetch_array($res)) { echo $row['0']." ".$row['1']." и так далее "; } sqlite_close($db);
Пример сайта, работающего на sqlite http://54plus.ru/realty/
|
|
| |
| Дата: Четверг, 02.01.2014, 10:47 | Сообщение # 9 |
Группа: Администраторы
Сообщений: 1530
| Запрос mySql на выбор случайной строки
select * from `table` order by RAND() limit 1
Поиск дубликатов в базе данных
SELECT id, COUNT(*) as n FROM my_table GROUP BY id HAVING n >1;
SQL запрос на загрузку(импорт) файла .cvs в базу данных
LOAD DATA local INFILE 'file.csv' INTO TABLE table FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (col1, col2, col3)
SQL запрос на сохранение(экспорт) таблицы в файл. csv
SELECT a,b,c FROM my_table INTO OUTFILE 'file.csv' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';
|
|
| |
| Дата: Среда, 26.03.2014, 15:16 | Сообщение # 10 |
Группа: Администраторы
Сообщений: 1530
| <?php //------------------------get_bd.php-------------------------------- $host="localhost"; $bd_user="bd_user"; $pass="pass"; $bd_name="bd_name"; $link = mysql_connect($host,$bd_user,$pass); mysql_select_db($bd_name, $link) or die(mysql_error()); mysql_query("SET NAMES 'utf8'"); //----------------------------------------------------------------------- //include("get_bd.php");
$tab="brends"; $query = "SELECT * FROM `".$tab."`";
//------------------------get_sql.php-------------------------------- $result = mysql_query($query, $link); $posts = array(); while ($row = mysql_fetch_array($result)) { $posts[] = $row; } mysql_close($link); //----------------------------------------------------------------------- //include("get_sql.php");
foreach ($posts as $post):
$id.="<li>".$post["id"]; // где $post["id"] значение текущей строки столбца данных("id") таблицы "tab_name"
endforeach;
echo $id;
?>
|
|
| |
| Дата: Вторник, 24.06.2014, 12:53 | Сообщение # 11 |
Группа: Администраторы
Сообщений: 1530
| Копирование и авторедактирование данных поля таблицы в новый столбец в sql таблице
1. Создаем новое поле(new_column) в таблице(table)
2. Выполняем следующий запрос: UPDATE `table` SET new_column = column
Пример более сложного запроса, который копируя данные в столбец `new_column` заменяет все пробелы столбца `column` на запятые
UPDATE `table` SET new_column = replace(column," ",",");
|
|
| |
| Дата: Четверг, 07.08.2014, 14:28 | Сообщение # 12 |
Группа: Администраторы
Сообщений: 1530
| Копирование строки таблицы в sql
insert into table1 select * from table1 where `id`=1
|
|
| |
| Дата: Среда, 17.09.2014, 10:16 | Сообщение # 13 |
Группа: Администраторы
Сообщений: 1530
| Запрос: показать только уникальные значения строки(колонки) таблицы
Таблица street1
id/name/city ------------------------------- 1 Ленина Москва 2 Ленина Москва 3 Тургенева Москва 4 Ленина Новосибирск
Sql запрос
SELECT `name` FROM `test_street` WHERE `id_city`='Москва' group by `name`
Результат sql запроса ------------------------------- Ленина Тургенева -------------------------------
Если хотим сохранить результаты sql запроса в таблицу(street2), делаем следующий sql запрос
insert into `street2` SELECT `id`,`name`,`city` FROM `street1` WHERE `city`='Москва' group by `name`
Примечание: предварительно надо создать таблицу "street2"(руками или sql запросом) с полями - id/name/city
|
|
| |
| Дата: Среда, 17.09.2014, 11:49 | Сообщение # 14 |
Группа: Администраторы
Сообщений: 1530
| Sql запрос на заполнение значений строки таблицы значениями строки другой таблицы по определенному условию:
Update `street`set id_name = (select id_street from `street2` where ((street2.name = street.name) and (street2.id_city= street.id_city)) limit 1)
|
|
| |
| Дата: Среда, 17.09.2014, 12:15 | Сообщение # 15 |
Группа: Администраторы
Сообщений: 1530
| sql запрос переписать записи поля автоинскримент(AUTO INCREMENT) чтобы цифры шли по порядку
сначала удалаяем индексное поле запросом
ALTER TABLE `test_street2` DROP `id`
потом вставим новое индексное поле
ALTER TABLE `test_street2` ADD `id_street` INT NOT NULL AUTO_INCREMENT FIRST , ADD PRIMARY KEY ( `id` )
|
|
| |