恥知らずのウェブエンジニア -web engineer, shameless

これは一歩を踏み出すことができない者たちのブログ

もう一度向き合うmysql(3)〜phpからmysqlを操作〜

またまた続き。
もう一度向き合うmysql(2) - 恥知らずのウェブエンジニア

MySQL徹底入門 第3版 ?5.5新機能対応?

MySQL徹底入門 第3版 ?5.5新機能対応?

phpからmysqlを操作

phpからmysqlを操作する方法は主に下記。

└php5.5xから非推奨

  • mysql improved extension(mysqli)

└上のmysqlを拡張したもの

mysql以外のDBもも対応

今回はmysqliを使ったサンプルを。

インストール

PHPをconfigureする際のオプションとして、下記を追加

--with-mysqli=mysqlnd

サンプルプログラム

前提:localhostmysql起動。hogeデータベースにtestテーブルあり。

PHPのmysqli_stmtでfetchAllっぽいものを実現する方法 - akiyan.com
こちらを参考に下記のように実装。

		$this->server	= 'localhost';
		$this->user		= '接続ユーザ';
		$this->password	= 'パスワード';
		$this->database	= '対象DB;
		$this->port		= 'ポート番号';

		// MySQL Connet
		$mysqli = new mysqli($this->server, $this->user, $this->password, $this->database, $this->port);
		if ($mysqli->connect_error)
		{
			die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
		}

		$tmp_id = 33;
		$query = "SELECT * FROM test WHERE id=?";
		if ($stmt = $mysqli->prepare($query))
		{
			// bind_paramの第一引数はバインドする値の型を文字列で列挙
			// s は string, i は integer, d は double, b は blob
			$stmt->bind_param("i", $tmp_id);
			if (!$stmt->execute())
			{
				$stmt->close();
				$mysqli->close();
				return;
			}

			$result	= array();
			$params	= array();
			$row	= array();
			$meta	= $stmt->result_metadata();
			while ($field = $meta->fetch_field()) {
				$params[] = &$row[$field->name];
			}
			call_user_func_array(array($stmt, 'bind_result'), $params);
			while ($stmt->fetch())
			{
				$tmp_res = (object) array();
				foreach($row as $key => $val)
				{
					$tmp_res->$key = $val;
				}
				$result[] = $tmp_res;
			}

			var_dump($result);
		}
		$stmt->free_result();
		$stmt->close();
		$mysqli->close();
var_dump($result);

array (size=1)
  0 => 
    object(stdClass)[17]
      public 'id' => int 33
      public 'test' => int 35
      public 'hoge' => int 33
      public 'comment' => null

問題なさげ。
ようやく本も後半へ。





感謝致します。
f:id:ogataka50:20140622123220j:plain