PHP アプリ開発
PHP 、iOS/Android連携でポイントとなるのは3点です。
1.iOS/Androidからデータの受け取り
2.PHP上での処理
3.処理後の結果の通知
1.iOS/Androidからデータの受け取り
iOS/Androidからphpが起動される際に、パラメタ情報を受け取ります。
2 | $usernum = $_POST [ "usernum" ]; |
項目は、usernum(ユーザー番号)、name(ユーザー名)、addr(住所)としています。
$_POST[“usernum”]、$_POST[“name”]、$_POST[“addr”]は、ios/Androidからのインターフェース情報です。
呼び出し元で、 以下の定義でパラメータを作成します。
「usernum=XXXX&name=XXXX&addr=XXXX」の形式で、XXXXは値がセットされます。
※参考 iOSのI/F情報
2 | NSString *post = [ NSString stringWithFormat: @"usernum=%@&name=%@&addr=%@" ,user_num,username,addr]; |
2.PHP上での処理
Select処理で、一連の流れを記載しています。update、Insert、deleteも同様の作りとしています。
◆Select処理
2 | $dsn = "$db_type:host=$db_host;dbname=$db_name;charset=utf8" ; |
5 | $link = mysql_connect( 'aqlier.com' , 'root' , '' ); |
7 | die ( '接続失敗です。' .mysql_error()); |
16 | $db_selected = mysql_select_db( 'mysql' , $link ); |
18 | die ( 'データベース選択失敗です。' .mysql_error()); |
27 | $dsn = "$db_type:host=$db_host;dbname=$db_name;charset=utf8" ; |
30 | $pdo = new PDO( $dsn , $db_user , $db_pass ); |
31 | $pdo ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); |
32 | $pdo ->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); |
33 | } catch(PDOException $Exception ) { |
34 | die ( 'エラー :' . $Exception ->getMessage()); |
39 | $sql = "SELECT * FROM db01 WHERE user_num = $usernum" ; |
40 | $stmh = $pdo ->prepare( $sql ); |
41 | $stmh ->bindValue( ':user_num' , '$usernum' , PDO::PARAM_STR ); |
43 | $count = $stmh ->rowCount(); |
45 | } catch (PDOException $Exception ) { |
50 | print "name=#該当データなし" . "# #" ; |
53 | $row = $stmh ->fetch(PDO::FETCH_ASSOC); |
54 | print "name=#" . $row [ 'user_name' ]. "#" . $row [ 'user_addr' ]. "#" ; |
◆Update処理 変更箇所のみ記載
2 | $pdo ->beginTransaction(); |
7 | WHERE user_num = $usernum "; |
9 | $stmh = $pdo ->prepare( $sql ); |
10 | $stmh ->bindValue( ':user_name' , $name , PDO::PARAM_STR ); |
11 | $stmh ->bindValue( ':user_addr' , $addr , PDO::PARAM_STR ); |
18 | } catch (PDOException $Exception ) { |
20 | print "エラー:" . $Exception ->getMessage(); |
◆Insert処理 変更箇所のみ記載
補足:DBでユーザ番号をキー部にしていないので、Insert命令を行う前に、ユーザ番号が重複しないように検索処理を行ってZERO件の時にinsertする処理にしています。
3 | $pdo ->beginTransaction(); |
4 | $sql = "INSERT INTO db01 (user_num, user_name, user_addr) VALUES ( '$usernum', '$name', '$addr' )" ; |
5 | $stmh = $pdo ->prepare( $sql ); |
6 | $stmh ->bindValue( ':user_num' , $usernum , PDO::PARAM_STR ); |
7 | $stmh ->bindValue( ':user_name' , $name , PDO::PARAM_STR ); |
8 | $stmh ->bindValue( ':user_addr' , $addr , PDO::PARAM_STR ); |
14 | } catch (PDOException $Exception ) { |
16 | print "エラー:" . $Exception ->getMessage(); |
21 | } catch (PDOException $Exception ) { |
◆Delete処理 変更箇所のみ記載
3 | $pdo ->beginTransaction(); |
4 | $sql = " DELETE FROM db01 |
5 | WHERE user_num = $usernum "; |
6 | $stmh = $pdo ->prepare( $sql ); |
7 | $stmh ->bindValue( ':user_num' , $usernum , PDO::PARAM_INT ); |
12 | } catch (PDOException $Exception ) { |
14 | print "エラー:" . $Exception ->getMessage(); |
3.処理後の結果の通知
呼び出し元に処理結果を通知します。
2 | print "name=#" . $row [ 'user_name' ]. "#" . $row [ 'user_addr' ]. "#" ; |
print の結果を呼び出し元に返しています。正常なら、ユーザ名と住所です。
受け取り処理を簡素化するため文字区切りで「#」を使用しています。
検索処理以外では、正常なら戻り値に「OK」を返しています。
関連記事
iOS/AndroidでHTTP通信アプリのまとめ