目次

内容

PHPコンパイル時の注意

  • ソースからインストールしたとき、configureに--with-mysql=/usr/local/mysqlをつけたときに「Cannot find MySQL header files under」とエラーがでたら、次を実行する。
    $ ln -s /usr/local/mysql/include/mysql /usr/local/include/mysql
  • 参考:MySQL5.0インストール - PukiWiki

php.iniの編集

  • 場所は/etc/php.in もしくは /usr/local/php.ini など
    extension=mysql.so

mysqlへの接続を簡単に抽象化

  • こんなの書かずにDoctrineでも使え、という声もある。
    <?php
    
    // 接続
    define( 'DB_HOST',   'localhost' );
    define( 'DB_USER',   'username' );
    define( 'DB_PASS',   'passwd' );
    define( 'DB_SCHEMA', 'schema' );
    
    // 接続
    $db = _db_connect( DB_HOST, DB_USER, DB_PASS, DB_SCHEMA );
    
    // 例1)データを全部取得
    $recs = array();
    $query = _db_query_select( $db, "tablename", "all", "order by id" );
    while( $row = _db_fetch_assoc( $query ) ){
        $recs[] = $row;
    }
    
    // 例2)データの挿入(数値型と文字型を分けて指定する)
    _db_insert( $db, "tablename",
        array(
            "int_field1" => 123,
            "int_field2" => 456
        ),
        array(
            "str_field1" => "string1",
            "str_field2" => "string2"
        )
    );
    
    // 切断
    _db_close( $db );
    
    //=====================================================================
    // 抽象化した関数群
    //=====================================================================
    
    /* [関数名] _db_connect
     * [機 能] MySQLに接続する
     * [引 数]
     * @param string $host   接続するデータベースのホスト名
     * @param string $user   接続するデータベースのユーザー名
     * @param string $pass   接続するデータベースのパスワード
     * @param string $schema 接続するデータベースのスキーマ名
     * [返り値]
     * @return object $db    データベース接続のオブジェクトを返す
    */
    function _db_connect( $host, $user, $pass, $schema ){
        $db = mysqli_connect( $host, $user, $pass );
        if( ! $db ){
            _db_error( "DB Connection Failure", mysqli_error($db), $table );
        }
        if( ! mysqli_select_db( $db, $schema ) ){
            _db_error( "DB Schema Connection Error", mysqli_error($db), $table );
        }
        return $db; 
    }
    
    /* [関数名] _db_close
     * [機 能] MySQLに接続する
     * [引 数]
     * @param object $db  データベースのオブジェクト
     * [返り値]
     * 特になし
    */
    function _db_close( $db ){
        mysqli_close( $db );
    }
    
    /* [関数名] _db_query_select
     * [機 能] MySQLでselectを実行
     * [引 数]
     * @param object $db      データベースのオブジェクト
     * @param string $table   テーブル名
     * @param array  $fields  出力するフィールド名、配列以外を指定した場合は全フィールドを出力
     * @param array  $options SQLクエリーのオプションを格納した配列
     * @param bool   $debug   実行するSQL文のデバッグ出力
     * [返り値]
     * @return object $query  成功した場合はDBの結果クエリーを返す
    */
    function _db_query_select( $db, $table, $fields, $options = null, $debug = null ){
        $fields = ( is_array( $fields ) ) ? implode( ",", $fields ) : '*';
        $sql = "select $fields from $table " . ( is_array( $options ) ? implode( " ", $options ) : $options );
        if( $debug ){
            echo $sql . "\n";
        }
        $query = mysqli_query( $db, $sql  );
        if( ! $query ){
            _db_error( "DB Query Error", mysqli_error($db), $table );
        }
        return $query;
    }
    
    /* [関数名] _db_fetch_assoc
     * [機 能] selectの結果を連想配列で取得
     * [引 数]
     * @param object $query  SQLクエリーのオブジェクト
     * [返り値]
     * @return array $query  select実行結果の連想配列
    */
    function _db_fetch_assoc( $query ){
        return mysqli_fetch_assoc( $query );
    }
    
    /* [関数名] _db_fetch_array
     * [機 能] selectの結果を配列で取得
     * [引 数]
     * @param object $query  SQLクエリーのオブジェクト
     * [返り値]
     * @return array $query  select実行結果の配列(数字添字とフィールド名)
    */
    function _db_fetch_array( $query ){
        return mysqli_fetch_array( $query );
    }
    
    /* [関数名] _db_fetch_row
     * [機 能] selectの結果を配列で取得
     * [引 数]
     * @param object $query  SQLクエリーのオブジェクト
     * [返り値]
     * @return array $query  select実行結果の数値添字の配列
    */
    function _db_fetch_row( $query ){
        return mysqli_fetch_row( $query );
    }
    
    /* [関数名] _db_insert
     * [機 能] MySQLでinsertを実行
     * [引 数]
     * @param object $db      データベースのオブジェクト
     * @param string $table   テーブル名
     * @param array  $int     数値型のデータ配列(「"フィールド名" => 値」で指定)
     * @param array  $str     文字型のデータ配列(「"フィールド名" => '値'」で指定)
     * @param bool   $debug   実行するSQL文のデバッグ出力
     * [返り値]
     * @return bool  $query  成功した場合はtrueを返す
    */
    function _db_insert( $db, $table, $int, $str, $debug = null ){
        $fields = array();
        $values = array();
        // 数値型
        foreach ( $int as $key => $value ){
            if( ! is_numeric( $value ) ){
                _db_error( "Wrong Data Type", "atteppt to set '$value' at int field '$key'", $table );
            }
            $fields[] = $key;
            $values[] = $value;
        }
        // 文字型
        foreach ( $str as $key => $value ){
            $fields[] = $key;
            $values[] = "'" . mysqli_real_escape_string( $db, $value ) . "'";
        }
        // SQL文字列の生成
        $sql = sprintf( 'insert into %s (%s) values (%s);', $table, implode( ",", $fields ), implode( ",", $values ) );
        if( $debug ){
            echo $sql ."\n";
        }
        // SQLの実行
        $query = mysqli_query( $db, $sql );
        if( ! $query ){
            _db_error( "DB Query Error", mysqli_error($db), $table );
        }
        return $query;
    }
    
    /* [関数名] _db_delete
     * [機 能] MySQLでdeleteを実行
     * [引 数]
     * @param object $db      データベースのオブジェクト
     * @param string $table   テーブル名
     * @param array  $options SQLクエリーのオプションを格納した配列
     * @param bool   $debug   実行するSQL文のデバッグ出力
     * [返り値]
     * @return bool  $query  成功した場合はtrueを返す
    */
    function _db_delete( $db, $table, $options = null, $debug = null ){
        $sql = "delete from $table " . ( is_array( $options ) ? implode( " ", $options ) : $options );
        if( $debug ){
            echo $sql . "\n";
        }
        $query = mysqli_query( $db, $sql );
        if( ! $query ){
            _db_error( "DB Delete Error", mysqli_error($db), $table );
        }
        return $query;
    }
    
    /* [関数名] _db_num_row
     * [機 能] selectの件数をカウント
     * [引 数]
     * @param object $query  SQLクエリーのオブジェクト
     * [返り値]
     * @return array $count  結果セットの件数
    */
    function _db_num_row( $query ){
        return mysqli_num_rows( $query );
    }
    
    /* [関数名] _db_autocommit
     * [機 能] autocommitの設定
     * [引 数]
     * @param object $db   データベースのオブジェクト
     * @param bool   $mode 自動コミットの有効・無効
     * [返り値]
     * @return buol  $result  成功した場合にTRUEを、失敗した場合にFALSEを返す
    */
    function _db_autocommit( $db, $mode ){
        return mysqli_autocommit ( $db, $mode );
    }
    
    /* [関数名] _db_commit
     * [機 能] commitの実行
     * [引 数]
     * @param object $db データベースのオブジェクト
     * [返り値]
     * @return bool  $result  成功した場合にTRUEを、失敗した場合にFALSEを返す
    */
    function _db_commit( $db ){
        return mysqli_commit($db);
    }
    
    /* [関数名] _db_insert_id
     * [機 能] AUTO_INCREMENT属性を持つカラムがあるテーブル上でのクエリにより生成されたIDを返す
     * [引 数]
     * @param object $db データベースのオブジェクト
     * [返り値]
     * @return int $id  直前のクエリで更新されたAUTO_INCREMENTフィールドの値
    */
    function _db_insert_id($db){
        return mysqli_insert_id($db);
    }
    
    /* [関数名] _db_escape_string
     * [機 能] SQL文中で使用できる正当な形式のSQL文字列を作成
     * [引 数]
     * @param object $db   データベースのオブジェクト
     * @param string $value 変換する文字列
     * [返り値]
     * @return int $result エスケープ済みの文字列を返します。
    */
    function _db_escape_string( $db, $value ){
        return mysqli_real_escape_string( $db, $value );
    }
    
    /* [関数名] _db_error
     * [機 能] DBで発生したエラーをecho出力
     * [引 数]
     * @param string $title  エラーのタイトル
     * @param string $msg    エラーの説明文
     * @param string $table  エラーが発生したテーブル名
     * [返り値]
     * 特になし
    */
    function _db_error( $title, $msg, $table ){
        echo( "[$title] " . $msg . " at table \"$table\"\n" );
    }
    

MySQLに直接接続するスクリプト

  • 古い方式
    <HTML>
    <BODY>
    <?PHP
    ### DB設定
    $dbUser = "username";
    $dbPass = "******";
    $dbHost = "localhost";
    $dbName = "dbname";
    ### 処理開始
    $con = mysql_connect($dbHost,$dbUser,$dbPass) || print "接続できません";
    print "接続に成功しました";
    mysql_close($con);
    ?>
    </BODY>
    </HTML>

PEAR::DBを使って接続

  • PDOが出たから用無し?
    <HTML>
    <BODY>
    <?PHP
    ### 初期設定
    require_once("DB.php");
    $dbUser = "username";
    $dbPass = "******";
    $dbHost = "localhost";
    $dbName = "dbname";
    $dbType = "mysql";
    $dsn = "$dbType://$dbUser:$dbPass@$dbHost/$dbName";
    ### DBへの接続
    $conn = DB::connect($dsn);
    if(DB::isError($conn)){
    	die($conn->getMessage());
    }else{
    	print "接続に成功しました。";
    }
    ### データを検索
    $sql = "SELECT * FROM auth;";
    $result = $conn->query($sql);
    if(DB::isError($result)){
    	print($result->getMessage());
    }else{
    	$count = $result->numRows();
    	print "件数は${count}件です。<BR><BR>";
    }
    while($rs = $result->fetchRow(DB_FETCHMODE_ASSOC)){
    	print $rs['username']."<BR>".$rs['password']."<BR>".$rs['unam']."<BR><BR>";
    }
    ### DBを閉じる
    $conn->disconnect;
    ?>
    </BODY>
    </HTML>

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-09-25 (日) 19:27:03 (444d)