Обновление данных PDO
В библиотеке 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 "" . $row["name"] . " "; echo "" . $row["age"] . " "; echo "Обновить "; echo " "; > echo "
"; > 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 , видит таблицу с данными и нажимает на ссылку «Обновить» в одной из строк:
После нажатия его перебрасывает на скрипт update.php , который выводит данные редактируемого объекта. Пользователь изменяет данные и нажимает на кнопку:
Данные в запросе POST отправляются этому же скрипту update.php , который сохраняет данные и перенаправляет пользователя обратно на index.php .
Sql update php pdo
Для обновления применяется 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 "
Имя | Возраст | |
---|---|---|
" . $row["name"] . " | "; echo "" . $row["age"] . " | "; echo "Обновить | "; echo "
Здесь используется команда 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 , видит таблицу с данными и нажимает на ссылку «Обновить» в одной из строк.
После нажатия его перебрасывает на скрипт update.php , который выводит данные редактируемого объекта. Пользователь изменяет данные и нажимает на кнопку.
Данные в запросе POST отправляются этому же скрипту update.php , который сохраняет данные и перенаправляет пользователя обратно на index.php .
PHP PDO Update
Summary: in this tutorial, you will learn how to update data in a table using PHP PDO.
Updating data from PHP using PDO
To update data in a table from PHP using PDO, you follow these steps:
- First, connect to the database by creating a new instance of the PDO class.
- Next, construct an SQL UPDATE statement to update data in a table.
- Then, call the prepare() method of the PDO object. The prepare() method returns a new instance of the PDOStatement class.
- After that, bind the values to the UPDATE statement by calling the bindParam() method of the PDOStatement object.
- Finally, execute the statement by calling the execute() method of the PDOStatement .
PHP PDO update example
The following example shows how to update the publisher with id 1 in the publishers table:
// connect to the bookdb database $pdo = require_once 'connect.php'; $publisher = [ 'publisher_id' => 1, 'name' => 'McGraw-Hill Education' ]; $sql = 'UPDATE publishers SET name = :name WHERE publisher_id = :publisher_id'; // prepare statement $statement = $pdo->prepare($sql); // bind params $statement->bindParam(':publisher_id', $publisher['publisher_id'], PDO::PARAM_INT); $statement->bindParam(':name', $publisher['name']); // execute the UPDATE statment if ($statement->execute()) < echo 'The publisher has been updated successfully!'; >
Code language: HTML, XML (xml)
First, connect to the bookdb database and get an instance of the PDO object. Check the connect.php script for the detail.
$pdo = require_once 'connect.php';
Code language: PHP (php)
Second, define data for updating and construct an UPDATE statement:
$publisher = [ 'publisher_id' => 1, 'name' => 'McGraw-Hill Education' ]; $sql = 'UPDATE publishers SET name = :name WHERE publisher_id = :publisher_id';
Code language: PHP (php)
The UPDATE statement uses the named placeholders :publisher_id .
Third, prepare the UPDATE statement for execution by calling the prepare() method:
$statement = $pdo->prepare($sql);
Code language: PHP (php)
Fourth, bind the values to the UPDATE statement:
// bind values $statement->bindParam(':publisher_id', $publisher['publisher_id'], PDO::PARAM_INT); $statement->bindParam(':name', $publisher['name']);
Code language: PHP (php)
Finally, execute the UPDATE statement by calling the execute() method of the PDOStatement object:
if ($statement->execute()) < echo 'The publisher has been updated successfully!'; >
Code language: PHP (php)
To get the number of updated rows, you call the rowCount() method of the PDOStatement object.
Summary
Update query with PDO and MySQL
@SWL Thanks. The formatting is done manually in this case, although some IDEs allow you to set formatting rules and perform the auto-formatting for you.
can i use this UPDATE `access_users` SET `contact_first_name` = :firstname, `contact_surname` = :surname, `contact_email` = :email, `telephone` = :telephone WHERE `user_name` = :user_name user name is in session
This has nothing to do with using PDO, it’s just that you are confusing INSERT and UPDATE.
- INSERT creates a new row. I’m guessing that you really want to create a new row.
- UPDATE changes the values in an existing row, but if this is what you’re doing you probably should use a WHERE clause to restrict the change to a specific row, because the default is that it applies to every row.
So this will probably do what you want:
$sql = "INSERT INTO `access_users` (`contact_first_name`,`contact_surname`,`contact_email`,`telephone`) VALUES (:firstname, :surname, :email, :telephone); ";
Note that I’ve also changed the order of columns; the order of your columns must match the order of values in your VALUES clause.
MySQL also supports an alternative syntax for INSERT:
$sql = "INSERT INTO `access_users` SET `contact_first_name` = :firstname, `contact_surname` = :surname, `contact_email` = :email, `telephone` = :telephone ";
This alternative syntax looks a bit more like an UPDATE statement, but it creates a new row like INSERT. The advantage is that it’s easier to match up the columns to the correct parameters.