以下のような『社員マスタ』を使って、まず PHP のコードを用意します。
create table `社員マスタ` ( `社員コード` varchar(4) ,`氏名` varchar(50) ,`フリガナ` varchar(50) ,`所属` varchar(4) ,`性別` int ,`作成日` datetime ,`更新日` datetime ,`給与` int ,`手当` int ,`管理者` varchar(4) ,`生年月日` datetime ,primary key(`社員コード`) )
全てのデータが空でも、SQL 的にはエラーは起こりません。但し、エラーが発生した場合は、kj にエラーメッセージをセットし、furi に 更新 SQL をセットします。 dbdata_update_json.php
<?php header( "Content-Type: application/json; Charset=utf-8" ); header( "pragma: no-cache" ); header( "Expires: Wed, 31 May 2000 14:59:58 GMT" ); header( "Cache-control: no-cache" ); header( "Access-Control-Allow-Origin: *" ); // *********************************************** // 初期設定 // *********************************************** if ( $_GET["sdata"] == "" ) { $_GET["sdata"] = "{}"; } $data = json_decode($_GET["sdata"]); $data->type = "UPDATE"; // *********************************************** // 利用変数設定 // *********************************************** $json_type = JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT; $db_data_type = MYSQLI_ASSOC; $_GET["sdata"] = str_replace("'","''",$_GET["sdata"]); // ----------------------------------------------- // *********************************************** // 接続情報 // *********************************************** $server = 'localhost'; $db_name = 'lightbox'; $user = 'root'; $password = 'trustno1'; // ----------------------------------------------- // *********************************************** // 接続 // *********************************************** $connect = @ new mysqli($server, $user, $password, $db_name); if ($connect->connect_error) { $data->status = "ERROR"; $data->kj = "接続エラーです"; print json_encode($data,JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT); exit(); } $connect->set_charset("utf8"); // ----------------------------------------------- // *********************************************** // NULL 項目の対応 // *********************************************** if ($data->kyuyo == '') { $data->kyuyo = "null"; } if ($data->teate == '') { $data->teate = "null"; } if ($data->seibetu == '') { $data->seibetu = "0"; } if ($data->birth == '') { $data->birth = "null"; } else { $data->birth = "'{$data->birth}'"; } // ----------------------------------------------- // *********************************************** // 更新 SQL // *********************************************** $query = <<< QUERY update `社員マスタ` set `氏名` = '{$data->kj}' ,`フリガナ` = '{$data->furi}' ,`性別` = {$data->seibetu} ,`給与` = {$data->kyuyo} ,`手当` = {$data->teate} ,`所属` = '{$data->syozoku}' ,`管理者` = '{$data->kanri}' ,`生年月日` = $data->birth where `社員コード` = '{$data->scode}' QUERY; // ----------------------------------------------- // *********************************************** // クエリ実行 // *********************************************** $result = $connect->query($query); if ( !$result ) { $data->status = "ERROR"; $data->kj = "クエリに誤りがあります"; $data->furi = $query; print json_encode( $data, $json_type ); exit(); } else { $data->status = "SUCCESS"; } // ----------------------------------------------- // *********************************************** // 接続解除 // *********************************************** $connect->close(); // ----------------------------------------------- // *********************************************** // 結果 // *********************************************** print json_encode($data,JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT); // ----------------------------------------------- ?>
PHP で Access-Control-Allow-Origin: * をセットしているので、どこに置いても JavaScript から呼び出し可能です。 以下のような簡単なコードで更新のテストが可能です。
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script> <script> $(function(){ var sdata = {}; $("#build").on("click", function(){ $(".entry").find("input").each(function(idx){ sdata[$(this).prop("id")] = $(this).val(); }); $("#result").text( JSON.stringify(sdata,null," ") ); }); $("#send").on("click", function(){ var sdata = encodeURIComponent( $("#result").text() ); $.get("http://localhost/log/easy_board/dbdata_update_json.php?sdata="+sdata ,function(data){ console.dir(data); }); }); }); </script> <input id="build" type="button" value="JSON 文字列作成"> <input id="send" type="button" value="サーバ送信"> <pre class="entry"> <input id="scode"> scode <input id="kj"> kj <input id="furi"> furi <input id="seibetu"> seibetu <input id="kyuyo"> kyuyo <input id="teate"> teate <input id="syozoku"> syozoku <input id="kanri"> kanri <input id="birth"> birth </pre> <pre id="result"> </pre>
|
【PHP + データベースの最新記事】
- PDO MySQL のバインドを使用した標準的な記述( ロリポップ )
- PHP で MySQLをテストする為のソースコード
- PHP で ODBC 関数を使って MS Access( データベース )にアクセスして結果を JSON 文字列として出力する
- Windows 環境の MySQL + PHP で、ODBC ドライバを使用してデータを取得する場合の3パターン
- PHP : SQLインジェクション対策付きの、MySQL のデータを JSON で返す自家製 API テスト用のテンプレート3パターン
- PHP : PIPES_AS_CONCAT を使用して、CSV 作成処理をサーバの負荷にして高速に WrodPress のデータを Excel で読み込める CSV として保存する処理
- PHP : WrodPress のデータを insert SQL で保存する処理
- PHP : WrodPress のデータを Excel で読み込める CSV として保存する処理
- PHP で MySQLi 使用時の データ型定数( MYSQLI_TYPE_ ) の詳細 ( バックアップ用 insert 文を作る為 )
- PHP から MySQL の簡易的なバックアップを取得する( 但し、DBサーバがディスクへの書き込み権限を持っている必要があります )
- PHP : JSON 文字列で定義されたフォーマットを元に、そのフォーマットにセットされた配列を使って insert と update の SQL 文を自動作成。
- PHP : PDO のエラー処理
- PHPのマニュアルにある、SQLインジェクション攻撃の例
- PHP : SQLite3 を PDO の ODBC 経由で読み込み
- PHP : 5.3 / 5.2.11 用共用 sqlite3(日本語テーブル) 読み込み
- PHP : Oracle を処理する COM を使ったクラス