MySQLi と PDO を使用して複数のデータを MySQL に挿入する
mysqli_multi_query() 関数を使用すると、複数の SQL ステートメントを実行できます。
次の例では、「MyGuests」テーブルに 3 つの新しいレコードを追加します。
例 (MySQLi - オブジェクト指向)
<?php $ servername = " localhost " ; $ username = " username " ; $ dbname = " myDB " ;$conn =新しいmysqli ( $servername , $username , $password , $dbname ) ; //リンクを確認します。
もし( $conn -> connect_error ) { die ( "接続に失敗しました: " . $conn - > connect_error ) ; $sql = " INSERT INTO MyGuests (名、姓、電子メール)VALUES ('John'、'Doe'、'[email protected]'); " ; $sql .= " INSERT INTO MyGuests (名、姓、電子メール) VALUES ('Mary', 'Moe', '[email protected]'); " ; $sql .= " INSERT INTO MyGuests (名、姓、電子メール)VALUES ('Julie', 'Dooley', '[email protected]') " ; if ( $conn -> multi_query ( $sql ) === TRUE ) { エコー"新しいレコードが正常に挿入されました" ;それ以外{ エコー"エラー: " 。 $ sql 。 $ conn - >エラー; $conn ->閉じる( ) ? > | 各 SQL ステートメントはセミコロンで区切る必要があることに注意してください。 |
|---|
例 (MySQLi - プロシージャ指向)
<?php $ servername = " localhost " ; $ username = " username " ; $ dbname = " myDB " ;$conn = mysqli_connect ( $servername , $username , $password , $dbname ) //リンクを確認します。もし( ! $conn ) { die ( "接続
に失敗しまし
た: " .mysqli_connect_error ( ) ) ; $sql = " INSERT INTO MyGuests (名、姓、電子メール)VALUES ('John'、'Doe'、'[email protected]'); " ; $sql .= " INSERT INTO MyGuests (名、姓、電子メール) VALUES ('Mary', 'Moe', '[email protected]'); " ; $sql .= " INSERT INTO MyGuests (名、姓、電子メール)VALUES ('Julie', 'Dooley', '[email protected]') " ; if ( mysqli_multi_query ( $conn , $sql ) ) { エコー"新しいレコードが正常に挿入されました" ;それ以外{ エコー"エラー: " . $ sql " . mysqli_error ( $ conn ) ; mysqli_close ( $ conn ) ;例(PDO)
<?php $ servername = " localhost " ; $ username = " username " ; $ dbname = " myDBPDO " ; { $conn =新しいPDO ( " mysql:host= $servername ;dbname= $dbname " , $username , $password ) // PDO エラー モードを例外に設定します。 $conn -> setAttribute ( PDO :: ATTR_ERRMODE , PDO :: ERRMODE_EXCEPTION ) //トランザクションを開始します。 $ conn -> beginTransaction ( ) // SQL ステートメント $conn -> exec ( " INSERT INTO MyGuests (名、姓、電子メール) VALUES ('John'、'Doe'、'[email protected]') " ) ; $conn -> exec ( " INSERT INTO MyGuests (名) 、姓、電子メール) VALUES ('Mary', 'Moe', '[email protected]') " ) ; $conn -> exec ( " INSERT INTO MyGuests (firstname, lastname, email) VALUES ('Julie', 'Dooley', '[email protected]') " //トランザクションを送信します。 $conn - >コミット( ) ; "新しいレコードが正常に挿入されました" ; catch ( PDOException $e ) { //実行に失敗した場合はロールバック $conn ->ロールバック( ) ; $ sql . " <br> " . $e -> getMessage ( ) ; $conn = null ? >準備されたステートメントを使用する
mysqli 拡張機能は、ステートメントを挿入する 2 番目の方法を提供します。
ステートメントを準備してパラメータをバインドできます。
mysql 拡張機能は、データなしでステートメントまたはクエリを mysql データベースに送信できます。 変数をネマティックに関連付けたり、「バインド」したりできます。
例 (MySQLi はプリペアドステートメントを使用します)
<?php $ servername = " localhost " ; $ username = " username " ; $ dbname = " myDB " ;$conn =新しいmysqli ( $servername , $username , $password , $dbname ) ; //接続を検出します。
もし( $conn -> connect_error ) { die ( "接続に失敗しました: " . $conn - > connect_error ) ;それ以外{ $sql = " INSERT INTO MyGuests(firstname, lastname, email) VALUES(?, ?, ?) " // mysqli_stmt_prepare() のステートメント オブジェクトを初期化します。 $stmt = mysqli_stmt_init ( $conn ) ; //前処理ステートメント もし( mysqli_stmt_prepare ( $stmt , $sql ) ) { //バインドパラメータ mysqli_stmt_bind_param ( $stmt , ' sss ' , $firstname , $lastname , $email ) //パラメータを設定して実行します。 $ firstname = 'ジョン' ; $ lastname = ' [email protected] ' ; $ firstname = 'メアリー' ; @ example.com ' ; mysqli_stmt_execute ( $ stmt ) ; $ firstname = 'ジュリー' ; ; $ email = ' [email protected] ' ;} ?>上記の例では、問題を解決するためにモジュール性が使用されていることがわかります。コードブロックを作成することで、読み取りと管理が容易になります。
パラメータのバインドに注意してください。 mysqli_stmt_bind_param() のコードを見てみましょう。
mysqli_stmt_bind_param($stmt, 'sss', $firstname, $lastname, $email);
この関数はパラメータ クエリをバインドし、パラメータをデータベースに渡します。 2 番目のパラメータは「sss」です。次のリストはパラメータの種類を示しています。 s 文字は、パラメータが文字列であることを mysql に伝えます。
次の 4 つのパラメータを指定できます。
i - 整数
d - 倍精度浮動小数点数
s - 文字列
b - ブール値
データのセキュリティを確保するには、各パラメーターにタイプを指定する必要があります。型判定により、SQL インジェクションの脆弱性のリスクを軽減できます。