METANIT.COM

PHP PDO — exec (INSERT, UPDATE, DELETE) MySQL

After the connection to database is successfully created and the PDO object instance is set, the object can be used to perform SQL queries.
The SQL queries with PDO can be made in two ways:
— directly using » exec() «, and » query() » methods,
— or with the prepare() . execute() statement.
The first variant is more simple, in this lesson it’s presented the exec method.

• The queries that modify rows in the table, but not return a result set with rows and columns (INSERT, UPDATE, and DELETE), are send with exec() , this method returns the number of affected rows, or FALSE on error.

• Queries that select rows (SELECT) and return a result set with rows and columns are sent with the query() method. In case of error, returns FALSE.

To work with databases in PHP, you must know the specific SQL queries as: CREATE TABLE, INSERT, SELECT, UPDATE, etc.
These queries are send as a string to the MySQL server.

Create MySQL table

To create a table in a MySQL database, use the » CREATE TABLE `table_name` » query, and the exec() method:

$objPDO->exec("CREATE TABLE `table_name` (`column1` TYPE, `column2` TYPE, . )");

— All these instructions are added after the PDO object is created, containing the connection to MySQL database.

In the next example it is created in a database named «tests» a table named «sites», with 4 colummns: «id», «name», «category», and «link».

exec("SET CHARACTER SET utf8"); // Sets encoding UTF-8 // Create the table $sql = "CREATE TABLE `sites` ( `id` int(8) NOT NULL AUTO_INCREMENT PRIMARY KEY , `name` varchar(70) NOT NULL DEFAULT '', `category` varchar(25), `link` varchar(100) ) CHARACTER SET utf8 COLLATE utf8_general_ci"; if($conn->exec($sql) !== false) echo 'The sites table is created'; // If the result is not false, display confirmation $conn = null; // Disconnect > catch(PDOException $e) < echo $e->getMessage(); > ?>

— The instruction: » exec(«SET CHARACTER SET utf8″) » sets the transfer of data between PHP and MySQL to be made with UTF-8 encoding. It is advisable to add this instruction especialy when working with data containing diacritics or special characters, but the PHP script should also contain this header: header(‘Content-type: text/html; charset=utf-8’); .

Читайте также:  Java and virtual memory

INSERT

Once the MySQL table is created, you can add rows with data. To add data into a table, use an INSERT command, in the exec() method.
Sintax:

$objPDO->exec(«INSERT INTO `table_name` (`column1`, `column2`, . ) VALUES (‘value1’, ‘value2’, . )»);

exec("SET CHARACTER SET utf8"); // Sets encoding UTF-8 // Define an insert query $sql = "INSERT INTO `sites` (`name`, `category`, `link`) VALUES ('Courses - Tutorials', 'education', 'coursesweb.net'), ('PHP-MySQL Course', 'programming', 'coursesweb.net/php-mysql'), ('English Courses', 'foreign languages', 'marplo.net/engleza')"; $count = $conn->exec($sql); $conn = null; // Disconnect > catch(PDOException $e) < echo $e->getMessage(); > // If data added ($count not false) displays the number of rows added if($count !== false) echo 'Number of rows added: '. $count; ?>

— This code adds 3 rows in the «sites» table. The $count variable stores the number of affected rows (added).
This script will display:

| id | | name | | category | | link | ------------------------------------------------------------------------------------ | 1 | | Courses - Tutorials | | education | | https://coursesweb.net | | 2 | | PHP-MySQL Course | | programming | | https://coursesweb.net/php-mysql | | 3 | | English Courses | | foreign languages | | marplo.net/engleza |

• To get the last auto-inserted «id» (in a AUTO_INCREMENT PRIMARY KEY column), use the lastInsertId() method.

— When you add multiple rows in the same INSERT query, this method will return the ID of the first added row.

UPDATE, and DELETE are SQL instructions that changes data in a table, but not return a result set with rows and columns. They can be executed in the same way as INSERT, with the exec() method.

UPDATE

The data in the rows of a MySQL table can be modified with the SQL command INSERT .
Syntax:

The next example changes data in the columns «name» and «link», where «id» is 3; in the «sites» table (created with the code above).

exec("SET CHARACTER SET utf8"); // Sets encoding UTF-8 // changes data in "name" si "link" colummns, where $sql = "UPDATE `sites` SET `name`='Spanish Course', `link`='marplo.net/spaniola' WHERE `id`=3"; $count = $conn->exec($sql); $conn = null; // Disconnect > catch(PDOException $e) < echo $e->getMessage(); > // If the query is succesfully performed ($count not false) if($count !== false) echo 'Affected rows : '. $count; // Shows the number of affected rows ?>

Sometimes an UPDATE query not affect any row (if the condition not matches), and will return 0. So, it is indicated to use this statement to check the result: if($count !== false) .
— Not: if(!$count)

DELETE

The DELETE instruction deletes rows in a table.
Syntax:

$objPDO->exec("DELETE FROM `table_name` WHERE condition");

The next example deletes all the rows in the «sites» table where the value in «category» column is » education » or » programming «.

exec("SET CHARACTER SET utf8"); // Sets encoding UTF-8 // Delete rows in "sites", according to the value of "category" column $sql = "DELETE FROM `sites` WHERE `category` IN('education', 'programming')"; $count = $conn->exec($sql); $conn = null; // Disconnect > catch(PDOException $e) < echo $e->getMessage(); > // If the query is succesfully performed ($count not false) if($count !== false) echo 'Affected rows: '. $count; // Shows the number of aAffected rows ?>

— In the next lesson you can learn how to select and get data stored in a MySQL table, using the PDO query() method.

Источник

Exec php update php

Для обновления применяется sql-команда UPDATE :

UPDATE Таблица SET столбец1 = значение1, столбец2 = значение2. WHERE столбец = значение

В библиотеке pdo для обновления данных может применяться тот же метод exec() объекта PDO, который применяется при добавлении. Например, возьмем использованную в прошлых темах таблицу Users со следующим определением:

CREATE TABLE Users (id INTEGER AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30), age INTEGER)

Изменим в этой таблице поле age для строки, которая имеет id = 1 :

exec($sql); echo "Обновлено строк: $affectedRowsNumber"; > catch (PDOException $e) < echo "Database error: " . $e->getMessage(); > ?>

Результат метода $conn->exec() в данном случае количество обновленных строк.

Однако если данные на обновление приходят извне, то мы опять как и при добавлении сталкиваемся с потенциальной уязвимостью подобного подхода. Поэтому в этом случаае опять же лучше использовать параметризацию и prepared statements .

Отправка данных из формы и обновление

Сначала определим файл index.php , который будет выводить список пользователей:

     

Список пользователей

query($sql); echo ""; foreach($result as $row)< echo ""; echo ""; echo ""; echo ""; echo ""; > echo "
ИмяВозраст
" . $row["name"] . "" . $row["age"] . "Обновить
"; > catch (PDOException $e) < echo "Database error: " . $e->getMessage(); > ?>

Здесь используется команда SELECT, которая получает всех пользователей из таблицы Users. В таблице третий столбец хранит ссылку на скрипт update.php , который мы далее создадим и которому передается параметр id с идентификатором пользователя, которого надо изменить.

Теперь определим файл update.php для редактирования пользователей:

 catch (PDOException $e) < die("Database error: " . $e->getMessage()); > ?>     prepare($sql); $stmt->bindValue(":userid", $userid); // выполняем выражение и получаем пользователя по id $stmt->execute(); if($stmt->rowCount() > 0) < foreach ($stmt as $row) < $username = $row["name"]; $userage = $row["age"]; >echo "

Обновление пользователя

Имя:

Возраст:

"; > else < echo "Пользователь не найден"; >> elseif (isset($_POST["id"]) && isset($_POST["name"]) && isset($_POST["age"])) < $sql = "UPDATE Users SET name = :username, age = :userage WHERE = $conn->prepare($sql); $stmt->bindValue(":userid", $_POST["id"]); $stmt->bindValue(":username", $_POST["name"]); $stmt->bindValue(":userage", $_POST["age"]); $stmt->execute(); header("Location: index.php"); > else < echo "Некорректные данные"; >?>

Весь код обновления структурно делится на две части. В первой части мы обрабатываем запрос Get. Когда пользователь нажимает на ссылку «Обновить» на странице index.php , то отправляется запрос GET, в котором передается id редактируемого пользователя. Поэтому мы сначала смотрим, представляет ли запрос GET-запрос и имеет ли он параметр id .

if($_SERVER["REQUEST_METHOD"] === "GET" && isset($_GET["id"]))

И если это запрос GET, то нам надо вывести данные редактируемого пользователя в поля формы. Для этого отправляем базе данных запрос

$sql = "SELECT * FROM Users WHERE = $conn->prepare($sql); $stmt->bindValue(":userid", $userid); $stmt->execute();

Далее получаем полученные данные и, если они имеются, выводим их в поля формы. Таким образом, пользователь увидит на форме данные редактируемого объекта.

Вторая часть скрипта представляет обработку POST-запроса — когда пользователь нажимает на кнопку на форме, то будет отправляться POST-запрос с отправленными данными. Мы получаем эти данные и отправляем базе данных команду UPDATE с этими данными, используя при этом параметризацию запроса:

$sql = "UPDATE Users SET name = :username, age = :userage WHERE = $conn->prepare($sql); $stmt->bindValue(":userid", $_POST["id"]); $stmt->bindValue(":username", $_POST["name"]); $stmt->bindValue(":userage", $_POST["age"]); $stmt->execute();

После выполнения запроса к БД перенаправляем пользователя на скрипт index.php с помощью функции

Таким образом, пользователь обращается к скрипту index.php , видит таблицу с данными и нажимает на ссылку «Обновить» в одной из строк.

Вывод данных из MySQL в PHP и pdo

После нажатия его перебрасывает на скрипт update.php , который выводит данные редактируемого объекта. Пользователь изменяет данные и нажимает на кнопку.

Редактирование данных из MySQL в PHP и pdo

Данные в запросе POST отправляются этому же скрипту update.php , который сохраняет данные и перенаправляет пользователя обратно на index.php .

Источник

Оцените статью