PHP MySQLは、複数のデータを挿入します
複数のデータを挿入するMySQLiをとPDOのMySQLを使用します
mysqli_multi_query()関数は、複数のSQL文を実行するために使用されます。
次の例では、「MyGuests」テーブルに3新しいレコードを追加されています。
例(MySQLiを - オブジェクト指向)
<?PHPの
$サーバー名= "localhost"を。
$ユーザ名= "ユーザ名";
$パスワード= "パスワード";
$ DBNAME = "MYDB」。
//リンクを作成
$コン=新しいmysqliの($のサーバー名、$ユーザ名、$パスワード、$ dbnameは);
//チェックリンク
場合($ conn-> connect_error){
死ぬ( "接続に失敗しました:"。$ conn-> connect_errorを)。
}
$のSql = "MyGuests。INSERT INTO(ファーストネーム、姓、電子メール)
VALUES( 'ジョン'、 'ドゥ'、 '[email protected]'); ";
$ SQLの。= "MyGuests。INSERT INTO(ファーストネーム、姓、電子メール)
VALUES( 'メリー'、 '萌え'、 '[email protected]'); ";
$ SQLの。= "MyGuests。INSERT INTO(ファーストネーム、姓、電子メール)
VALUES( 'ジュリー」、「ドゥーリー'、 '[email protected]') ";
場合($ conn-> multi_queryの($ sqlを)=== TRUE){
「新しいレコードが正常に挿入されている "エコー;
}エルス{
。エコー "エラー:" $ SQL」<BR> "$ conn->エラー; ..
}
$ Conn->クローズ();
?>
$サーバー名= "localhost"を。
$ユーザ名= "ユーザ名";
$パスワード= "パスワード";
$ DBNAME = "MYDB」。
//リンクを作成
$コン=新しいmysqliの($のサーバー名、$ユーザ名、$パスワード、$ dbnameは);
//チェックリンク
場合($ conn-> connect_error){
死ぬ( "接続に失敗しました:"。$ conn-> connect_errorを)。
}
$のSql = "MyGuests。INSERT INTO(ファーストネーム、姓、電子メール)
VALUES( 'ジョン'、 'ドゥ'、 '[email protected]'); ";
$ SQLの。= "MyGuests。INSERT INTO(ファーストネーム、姓、電子メール)
VALUES( 'メリー'、 '萌え'、 '[email protected]'); ";
$ SQLの。= "MyGuests。INSERT INTO(ファーストネーム、姓、電子メール)
VALUES( 'ジュリー」、「ドゥーリー'、 '[email protected]') ";
場合($ conn-> multi_queryの($ sqlを)=== TRUE){
「新しいレコードが正常に挿入されている "エコー;
}エルス{
。エコー "エラー:" $ SQL」<BR> "$ conn->エラー; ..
}
$ Conn->クローズ();
?>
各SQL文はセミコロンで区切らなければならないことに注意してください。 |
例(MySQLiを - プロセス指向)
<?PHPの
$サーバー名= "localhost"を。
$ユーザ名= "ユーザ名";
$パスワード= "パスワード";
$ DBNAME = "MYDB」。
//リンクを作成
$コン= mysqli_connect($のサーバー名、$ユーザ名、$パスワード、$ dbnameは);
//チェックリンク
{(!$ CONN)の場合
(「接続に失敗しました: "mysqli_connect_error())死にます。
}
$のSql = "MyGuests。INSERT INTO(ファーストネーム、姓、電子メール)
VALUES( 'ジョン'、 'ドゥ'、 '[email protected]'); ";
$ SQLの。= "MyGuests。INSERT INTO(ファーストネーム、姓、電子メール)
VALUES( 'メリー'、 '萌え'、 '[email protected]'); ";
$ SQLの。= "MyGuests。INSERT INTO(ファーストネーム、姓、電子メール)
VALUES( 'ジュリー」、「ドゥーリー'、 '[email protected]') ";
{(mysqli_multi_query($ CONN、$ sqlを))の場合
「新しいレコードが正常に挿入されている "エコー;
}エルス{
。エコー "エラー:" $ sqlを「<BR>」mysqli_error($ CONN); ..
}
mysqli_close($ CONN)。
?>
$サーバー名= "localhost"を。
$ユーザ名= "ユーザ名";
$パスワード= "パスワード";
$ DBNAME = "MYDB」。
//リンクを作成
$コン= mysqli_connect($のサーバー名、$ユーザ名、$パスワード、$ dbnameは);
//チェックリンク
{(!$ CONN)の場合
(「接続に失敗しました: "mysqli_connect_error())死にます。
}
$のSql = "MyGuests。INSERT INTO(ファーストネーム、姓、電子メール)
VALUES( 'ジョン'、 'ドゥ'、 '[email protected]'); ";
$ SQLの。= "MyGuests。INSERT INTO(ファーストネーム、姓、電子メール)
VALUES( 'メリー'、 '萌え'、 '[email protected]'); ";
$ SQLの。= "MyGuests。INSERT INTO(ファーストネーム、姓、電子メール)
VALUES( 'ジュリー」、「ドゥーリー'、 '[email protected]') ";
{(mysqli_multi_query($ CONN、$ sqlを))の場合
「新しいレコードが正常に挿入されている "エコー;
}エルス{
。エコー "エラー:" $ sqlを「<BR>」mysqli_error($ CONN); ..
}
mysqli_close($ CONN)。
?>
(PDO)の例
<?PHPの
$サーバー名= "localhost"を。
$ユーザ名= "ユーザ名";
$パスワード= "パスワード";
$ DBNAME = "myDBPDO";
{しよう
$コン=新しいPDO( "mysqlの:ホスト= $サーバー名; dbnameに= $ dbnameに"、$ユーザ名、$パスワード);
//例外にPDOのエラーモードを設定します。
$ Conn->のsetAttribute(PDO :: ATTR_ERRMODE、PDO :: ERRMODE_EXCEPTION)。
トランザクションを開始します//
$ Conn->のbeginTransaction();
// SQL文
$ Conn->のexec( "(MyGuests。INSERT INTOファーストネーム、姓、電子メール)
VALUES( 'ジョン'、 'ドゥ'、 '[email protected]') ");
$ Conn->のexec( "(MyGuests。INSERT INTOファーストネーム、姓、電子メール)
VALUES( 'メリー'、 '萌え'、 '[email protected]') ");
$ Conn->のexec( "(MyGuests。INSERT INTOファーストネーム、姓、電子メール)
VALUES( 'ジュリー」、「ドゥーリー'、 '[email protected]') ");
//トランザクションをコミット
$ Conn->(コミット)。
「新しいレコードが正常に挿入されている "エコー;
}
キャッチ(PDOExceptionます$ e)の
{
//ロールバックが失敗した場合
$ Conn->ロールバック();
..エコー$ sqlを「<BR> "は$ e-> getMessage()の;
}
$コン= nullを。
?>
$サーバー名= "localhost"を。
$ユーザ名= "ユーザ名";
$パスワード= "パスワード";
$ DBNAME = "myDBPDO";
{しよう
$コン=新しいPDO( "mysqlの:ホスト= $サーバー名; dbnameに= $ dbnameに"、$ユーザ名、$パスワード);
//例外にPDOのエラーモードを設定します。
$ Conn->のsetAttribute(PDO :: ATTR_ERRMODE、PDO :: ERRMODE_EXCEPTION)。
トランザクションを開始します//
$ Conn->のbeginTransaction();
// SQL文
$ Conn->のexec( "(MyGuests。INSERT INTOファーストネーム、姓、電子メール)
VALUES( 'ジョン'、 'ドゥ'、 '[email protected]') ");
$ Conn->のexec( "(MyGuests。INSERT INTOファーストネーム、姓、電子メール)
VALUES( 'メリー'、 '萌え'、 '[email protected]') ");
$ Conn->のexec( "(MyGuests。INSERT INTOファーストネーム、姓、電子メール)
VALUES( 'ジュリー」、「ドゥーリー'、 '[email protected]') ");
//トランザクションをコミット
$ Conn->(コミット)。
「新しいレコードが正常に挿入されている "エコー;
}
キャッチ(PDOExceptionます$ e)の
{
//ロールバックが失敗した場合
$ Conn->ロールバック();
..エコー$ sqlを「<BR> "は$ e-> getMessage()の;
}
$コン= nullを。
?>
プリペアドステートメントを使用します
mysqli拡張は、ステートメントを挿入するための第2の方法を提供します。
私たちは、文とバインドされたパラメータを用意しました。
MySQLの拡張は、mysqlデータベースへのステートメントまたはクエリせずにデータを送信することができます。 あなたは列に関連付けるか、「バインド」変数をすることができます。
例(プリペアドステートメントを使用して、MySQLiを)
<?PHPの
$サーバー名= "localhost"を。
$ユーザ名= "ユーザ名";
$パスワード= "パスワード";
$ DBNAME = "MYDB」。
//接続を作成します。
$コン=新しいmysqliの($のサーバー名、$ユーザ名、$パスワード、$ dbnameは);
//接続のテスト
場合($ conn-> connect_error){
死ぬ( "接続に失敗しました:"。$ conn-> connect_errorを)。
}エルス{
$のSql = "MyGuests値にINSERT(?,, ??)」。
//()初期化ステートメントオブジェクトをし、mysqli_stmt_prepareするには
$のstmt = mysqli_stmt_init($ CONN)。
//準備ステートメント
であれば(し、mysqli_stmt_prepare($のstmtは、$ sqlを)){
//バインドパラメータ
mysqli_stmt_bind_param($ stmtは、「SSS」は、$ FIRSTNAME、$の姓、$メール)。
//パラメータを設定し、実行します
$ファーストネーム= 'ジョン';
$姓= 'ドウ';
$メール= '[email protected]';
mysqli_stmt_execute($ののstmt);
$ファーストネーム= 'メリー';
$姓= '萌え';
$メール= '[email protected]';
mysqli_stmt_execute($ののstmt);
$ファーストネーム= 'ジュリー';
$姓= 'ドゥーリー';
$メール= '[email protected]';
mysqli_stmt_execute($ののstmt);
}
}
?>
$サーバー名= "localhost"を。
$ユーザ名= "ユーザ名";
$パスワード= "パスワード";
$ DBNAME = "MYDB」。
//接続を作成します。
$コン=新しいmysqliの($のサーバー名、$ユーザ名、$パスワード、$ dbnameは);
//接続のテスト
場合($ conn-> connect_error){
死ぬ( "接続に失敗しました:"。$ conn-> connect_errorを)。
}エルス{
$のSql = "MyGuests値にINSERT(?,, ??)」。
//()初期化ステートメントオブジェクトをし、mysqli_stmt_prepareするには
$のstmt = mysqli_stmt_init($ CONN)。
//準備ステートメント
であれば(し、mysqli_stmt_prepare($のstmtは、$ sqlを)){
//バインドパラメータ
mysqli_stmt_bind_param($ stmtは、「SSS」は、$ FIRSTNAME、$の姓、$メール)。
//パラメータを設定し、実行します
$ファーストネーム= 'ジョン';
$姓= 'ドウ';
$メール= '[email protected]';
mysqli_stmt_execute($ののstmt);
$ファーストネーム= 'メリー';
$姓= '萌え';
$メール= '[email protected]';
mysqli_stmt_execute($ののstmt);
$ファーストネーム= 'ジュリー';
$姓= 'ドゥーリー';
$メール= '[email protected]';
mysqli_stmt_execute($ののstmt);
}
}
?>
私たちは、問題に対処するためのモジュラーを使用して、上記の例で見ることができます。 私たちは、簡単に読んだり管理のためのコードのブロックを作成することができます。
バインドされたパラメータに注意してください。 それでは、mysqli_stmt_bind_paramで()のコードを見てみましょう:
mysqli_stmt_bind_param($stmt, 'sss', $firstname, $lastname, $email);
バインディングクエリの引数とは、データベースにパラメータを渡します。 2番目のパラメータは、「SSS」です。 以下のリストは、パラメータの種類を示しています。 sの文字は、MySQLの引数が文字列で伝えます。
これは、次の4つのパラメータであってもよいです。
- 私 - 整数
- D - 倍精度浮動小数点数
- S - 文字列
- B - ブール値
各パラメータの型は、データのセキュリティを確保するために指定する必要があります。 判決の種類によって、SQLインジェクションの脆弱性のリスクを減らすことができます。