PHPでトランザクションを久々に使用した。サンプルコード
2023.03.08
おはようございます。
先日、PHPでトランザクションを久々に使用した。サンプルコードは以下になります。トランザクションやロールバックとかいう言葉は聞いても実際に使用してみないとその役割りや良さはわからないものかなって思います。
$dsn = 'mysql:host=localhost;dbname=mydatabase';
$username = 'myusername';
$password = 'mypassword';
try {
$dbh = new PDO($dsn, $username, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// トランザクションを開始する
$dbh->beginTransaction();
// データベース操作1を実行する
$stmt1 = $dbh->prepare('INSERT INTO users (name, email) VALUES (?, ?)');
$stmt1->execute(array('John Doe', 'john.doe@example.com'));
// データベース操作2を実行する
$stmt2 = $dbh->prepare('UPDATE accounts SET balance = balance - 100 WHERE user_id = ?');
$stmt2->execute(array(1));
// データベース操作3を実行する(エラーが起きることをシミュレートする)
$stmt3 = $dbh->prepare('INSERT INTO orders (user_id, total_amount) VALUES (?, ?)');
$stmt3->execute(array(1, 'abc')); // 'total_amount'カラムに文字列を挿入しているため、エラーが発生する
// コミットする
$dbh->commit();
} catch (PDOException $e) {
// エラーが発生した場合はロールバックする
$dbh->rollBack();
echo 'Transaction failed: ' . $e->getMessage();
}
タグ
array, beginTransaction, catch, commit, dbh, dbname, echo, execute, getMessage, host, john.doe@example.com, localhost, mydatabase, MYSQL, PDO, PDOException, prepare, rollBack, setAttribute, VALUES,
xdebugの動作仕方が分からなかったのでメモ。
2019.06.29
Xdebugを動作させます。(F5)
次にブラウザを開き動作させたいURLを記入しエンター:D
すると…
debug出来るようになります、設定等は割愛します。
ちなみにphp.iniの方はこんな感じにしてます。
zend_extension ="/xxx/xdebug.so"
xdebug.remote_autostart=1
xdebug.remote_enable=1
xdebug.remote_port=9000
xdebug.remote_connect_back = 1
xdebug.remote_host=IP Address
タグ
1, 5, 9000, Address, autostart, back, connect, debug, enable, extension, host, ini, IP, php, port, remote, so, url, xdebug, xxx, zend, エンター, ブラウザ, メモ, 仕方, 割愛, 動作, 感じ, 方, 記入, 設定,
PHPでバインドするこれでSQLの脆弱性が!?
2019.02.23
上記の画像では脆弱性がある。
PHPでバインドするこれでSQLの脆弱性が解決してくれる?
こういう記述すると良さげ。 おまけでSQLデバッグ方法を書いとります。
<?php
$sql =<<<SQL
select * from demo where id = :id and namae = :hoge;
SQL;
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
$id = 123;
$hoge = "hoge";
$sth = $dbh->prepare($sql);
$sth->bindValue(':id', $id, PDO::PARAM_INT);
$sth->bindValue(':hoge', $hoge, PDO::PARAM_STR);
$sth->execute();
タグ
$dbh->, dbh, dbname, execute, hoge, host, localhost, lt, MYSQL, PARAM_INT, PARAM_STR, PDO, php, prepare, SQL, SQL select, sth, test,