2017年1月13日

PHPアプリ開発

PHP、ios/Android連携でポイントとなるのは3点です。

1.ios/Androidからデータの受け取り
2.PHP上での処理
3.処理後の結果の通知

1.ios/Androidからデータの受け取り

ios/Androidからphpが起動される際に、パラメタ情報を受け取ります。

//
$usernum = $_POST["usernum"];//ユーザー番号
$name = $_POST["name"];//ユーザー名
$addr = $_POST["addr"];//住所
//

項目は、usernum(ユーザー番号)、name(ユーザー名)、addr(住所)としています。

$_POST[“usernum”]、$_POST[“name”]、$_POST[“addr”]は、ios/Androidからのインターフェース情報です。

呼び出し元で、 以下の定義でパラメータを作成します。
usernum=XXXX&name=XXXX&addr=XXXX」の形式で、XXXXは値がセットされます。

※参考 iosのI/F情報

//
 NSString*post = [NSString stringWithFormat:@"usernum=%@&name=%@&addr=%@" ,user_num,username,addr];
//
2.PHP上での処理


Select処理で、一連の流れを記載しています。update、Insert、deleteも同様の作りとしています。

◆Select処理

//
$dsn = "$db_type:host=$db_host;dbname=$db_name;charset=utf8";

//ok
$link = mysql_connect('localhost', 'root', '');
if (!$link) {
 die('接続失敗です。'.mysql_error());
}

//print('

接続に成功しました。

');

$db_selected = mysql_select_db('mysql', $link);
if (!$db_selected){
 die('データベース選択失敗です。'.mysql_error());
}

//print('

データベースを選択しました。

');


 $dsn = "$db_type:host=$db_host;dbname=$db_name;charset=utf8";

 try {
 $pdo = new PDO($dsn, $db_user,$db_pass);
 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
 } catch(PDOException $Exception) {
 die('エラー :' . $Exception->getMessage());
 }
 
 try {
 
 $sql= "SELECT * FROM db01 WHERE user_num = $usernum";
 $stmh = $pdo->prepare($sql);
 $stmh->bindValue(':user_num', '$usernum', PDO::PARAM_STR );
 $stmh->execute();
 $count = $stmh->rowCount();
 
} catch (PDOException $Exception) {
 $count = 0;
}

if ($count == 0){
 print "name=#該当データなし"."# #";
 
}else{
 $row = $stmh->fetch(PDO::FETCH_ASSOC);
 print "name=#".$row['user_name']."#".$row['user_addr']."#";
 
}
?>
?>


◆Update処理 変更箇所のみ記載
 

try {
 $pdo->beginTransaction();
 $sql = "UPDATE db01
 SET 
 user_name = '$name',
 user_addr = '$addr'
 WHERE user_num = $usernum";

 $stmh = $pdo->prepare($sql);
 $stmh->bindValue(':user_name', $name, PDO::PARAM_STR );
 $stmh->bindValue(':user_addr', $addr, PDO::PARAM_STR );

 $stmh->execute();
 $pdo->commit();
 print "ok
";
 
} catch (PDOException $Exception) {
 $pdo->rollBack();
 print "エラー:" . $Exception->getMessage();
}

◆Insert処理 変更箇所のみ記載 

補足:DBでユーザ番号をキー部にしていないので、Insert命令を行う前に、ユーザ番号が重複しないように検索処理を行ってZERO件の時にinsertする処理にしています。

//
try {
 $pdo->beginTransaction();
 $sql = "INSERT INTO db01 (user_num, user_name, user_addr) VALUES ( '$usernum', '$name', '$addr' )";
 $stmh = $pdo->prepare($sql);
 $stmh->bindValue(':user_num', $usernum, PDO::PARAM_STR );
 $stmh->bindValue(':user_name', $name, PDO::PARAM_STR );
 $stmh->bindValue(':user_addr', $addr, PDO::PARAM_STR );
 $stmh->execute();
 $pdo->commit();
 print "ok
";

 
} catch (PDOException $Exception) {
 $pdo->rollBack();
 print "エラー:" . $Exception->getMessage();
}

}

} catch (PDOException $Exception) {
 print "データあり";
}
//

◆Delete処理 変更箇所のみ記載 

//
try {
 $pdo->beginTransaction();
 $sql = "DELETE FROM db01
 WHERE user_num = $usernum";
 $stmh = $pdo->prepare($sql);
 $stmh->bindValue(':user_num', $usernum, PDO::PARAM_INT );
 $stmh->execute();
 $pdo->commit();
 print "ok
";
 } catch (PDOException $Exception) {
 $pdo->rollBack();
 print "エラー:" . $Exception->getMessage();
 }

3.処理後の結果の通知

呼び出し元に処理結果を通知します。

//
print "name=#".$row['user_name']."#".$row['user_addr']."#";
//

print の結果を呼び出し元に返しています。正常なら、ユーザ名と住所です。
受け取り処理を簡素化するため文字区切りで「#」を使用しています。

検索処理以外では、正常なら戻り値に「ok」を返しています。

関連記事

    ios/AndroidでHTTP通信アプリのまとめ