PHP(PDO)でMySQL(MariaDB)に接続してDBからデータを取得する

今さらながらPHP7対応。
なぜか500エラーを連発してハマってしまったのでうまくいった書き方をメモしときます。

    function DBconnect()
    {
        $DBlink = mysqli_connect('yourdbhost.work', 'username', 'password');

        if (!$DBlink) {
            die('MYSQL接続エラー' . mysqli_error($DBlink));
        }

        mysqli_set_charset($DBlink, 'utf8');

        return $DBlink;
    }

    function DBselect($selectDB, $DBlink)
    {
        $db_selected = mysqli_select_db($DBlink, $selectDB);

        if (!$db_selected) {
            die($selectDB . 'データベース選択エラー' . mysqli_error($DBlink));
        }
    }

    function RunSQL($DBlink, $sql)
    {
        $result = mysqli_query($DBlink, $sql);

        if (!$result) {
            die('クエリーのエラー' . mysqli_error($DBlink));
        }

        return $result;
    }


    function h(string $string): string
    {
        return $string;
    }


    function myfunction()
    {

            $DBlink = DBconnect();
            DBselect('database', $DBlink);
            $records = RunSQL(
                $DBlink,
                "SELECT " .
                "*" .
                "FROM `table`" .
                "ORDER BY `key`;"
            );

            $result = [];

            while ($row = mysqli_fetch_array($records)) {
                //ここに処理を
            }
            return $result;

            mysqli_close($RDBlink);
    };

懐かしい感じですね。
これを↓のように変えさせてもらいました。

define('DSN', 'mysql:host=yourdbhost.work;dbname=dbname;charset=utf8');
define('DB_USERNAME', 'username');
define('DB_PASSWORD', 'password');

try{
    $dbh = new PDO(DSN, DB_USERNAME, DB_PASSWORD,
     array(
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_EMULATE_PREPARES => false,
        )
    );

    $prepare = $dbh->prepare('SELECT * FROM table ORDER BY key');
    $prepare->execute();

    $result = $prepare->fetchAll(PDO::FETCH_ASSOC);

    foreach($result as $r){

      //ここで処理を

    }


} catch (PDOException $e){
    $error = $e->getMessage();
}

macへnodeをインストール

brew install node

ところが

node already installed, it's just not linked

インストールはできたけどリンクされてないから使えないよ!と。。
なおかつリンクを上書きするといいよ!

と言われるので

brew link --overwrite node

とするも、弾かれてしまう。。

下記で解決!

brew uninstall node
 いったんアンインストール
brew update
brew upgrade
 Homebrewを最新に
brew cleanup
 いらないものを消す
brew install node
 もっかいインストール
sudo chown -R $(whoami) /usr/local/
 リンクが書いてあるファイルを上書きできるように権限を変更
 
brew link --overwrite node
 リンクを上書き
brew postinstall node
 これは何かよくわからない

OSアップデートしてsassが使えなくなったら

masomi792017-11-02

症状::

新規案件に着手する前にOSXをHigh Sierraにアップデートしたらsass が使えない!急いでるのに!

sass -v

バージョン確認しようとしただけで。。。

-bash: /usr/local/bin/sass: /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby: bad interpreter: No such file or directory

とおこられる。

対策::

1.Xcodeをアップデート
App Storeから行います。

2.ターミナルからRubyを再インストール

brew install rbenv ruby-build

3.sass とcompassを /usr/local/binへインストール

sudo gem install -n /usr/local/bin sass
sudo gem install -n /usr/local/bin compass

というわけでアップデートは慎重に。。。

/wp 以下に作成したWPサイトのトップページだけは独立したページを使用します。


↑のindex.htmlをトップに表示させます。

1) テンプレートファイル template_toppage.phpを作成します。
内容は以下の通り

<?php
/*
Template Name: Top Page
*/
readfile(ABSPATH . '/index.html');
?>

ABSPATHはwordpressがインストールされたフォルダのパスを示します。
ですのでindex.htmlがwp/フォルダ以下にあっても上記の指定でOKです。

2) WP管理画面から固定ページを新規に作成します。
タイトルは「トップページ」などてきとうでかまいません。

テンプレートに先ほど作成したTop Pageが表示されますのでこれを選択します。

3) 「設定」=> 「表示設定」=>「フロントページの表示」で「固定ページ」にチェックをし、先ほど作成したページを選択します。

Yahoo!店舗の製作の際に覚えたこと

画像ファイルのパス

テンプレート内で記入する場合は下記でOK
どのフォルダにアップしてもここに入ります。

<img src="/lib/ストアアカウント/画像ファイル名">

実際のURLは

<img src="http://shopping.c.yimg.jp/lib/ストアアカウント/画像ファイル名">

となるようです。

固定たて帯バナーを設置する
トリプルを使わない場合は外部のstylesheetを読み込めないので、全部インラインで指定する必要があります。

<div style="position:fixed;background-image:url(http://shopping.c.yimg.jp/lib/店舗ID/画像ファイル名);background-repeat:repeat-y;right:0;top:0;height:1000px;width:200px;z-index:-1"></div>

position:fixed;
background-image:url(http://shopping.c.yimg.jp/lib/店舗ID/画像ファイル名);  /*画像ファイル*/
background-repeat:repeat-y;
right:0;
top:0;
height:1000px;
width:200px;
z-index:-1 /*重なった時に下になるように*/

thumbnail,medium,large,fullから選ぶ

<?php the_post_thumbnail('画像のサイズ'); ?>

画像のサイズは下記から指定します。

thumbnail サムネイル
medium
large
full 原寸大

選べるのは4種類だけですが、管理画面からそれぞれのサイズの数値を指定できます。
「設定」→「メディア」から設定できます。

子カテゴリを非表示に

default-widgets.phpの533行目当たりから始まる部分が
カテゴリ一覧ウィジェットを生成する部分みたいです。

/**
* Categories widget class
*
* @since 2.8.0
*/
class WP_Widget_Categories extends WP_Widget {
public function __construct() {
$widget_ops = array('classname' => 'widget_categories', 'description' => __( "A list or dropdown of categories." ) );
parent::__construct('categories', __('Categories'), $widget_ops);
}
public function widget( $args, $instance ) {
/** This filter is documented in wp-includes/default-widgets.php */
$title = apply_filters( 'widget_title', empty( $instance['title'] ) ? __( 'Categories' ) : $instance['title'], $instance, $this->id_base );
$c = ! empty( $instance['count'] ) ? '1' : '0';
$h = ! empty( $instance['hierarchical'] ) ? '1' : '0';
$d = ! empty( $instance['dropdown'] ) ? '1' : '0';
echo $args['before_widget'];
if ( $title ) {
echo $args['before_title'] . $title . $args['after_title'];
}
$cat_args = array( 'orderby' => 'name', 'show_count' => $c, 'hierarchical' => $h);
if ( $d ) {
$cat_args['show_option_none'] = __('Select Category');
/**
* Filter the arguments for the Categories widget drop-down.
*
* @since 2.8.0
*
* @see wp_dropdown_categories()
*
* @param array $cat_args An array of Categories widget drop-down arguments.
*/
wp_dropdown_categories( apply_filters( 'widget_categories_dropdown_args', $cat_args ) );
?>
<script type='text/javascript'>
/* <![CDATA[ */
	var dropdown = document.getElementById("cat");
	function onCatChange() {
		if ( dropdown.options[dropdown.selectedIndex].value > 0 ) {
			location.href = "<?php echo home_url(); ?>/?cat="+dropdown.options[dropdown.selectedIndex].value;
		}
	}
	dropdown.onchange = onCatChange;
/* ]]> */
</script>
<?php
} else {
?>
<div id="right_categories">
<ul>
<?php
$cat_args['title_li'] = '';
/**
		 * Filter the arguments for the Categories widget.
		 *
		 * @since 2.8.0
		 *
		 * @param array $cat_args An array of Categories widget options.
		 */
wp_list_categories( apply_filters( 'widget_categories_args', $cat_args ) );
?>
</ul>
</div>
<?php
}
echo $args['after_widget'];
}
public function update( $new_instance, $old_instance ) {
$instance = $old_instance;
$instance['title'] = strip_tags($new_instance['title']);
$instance['count'] = !empty($new_instance['count']) ? 1 : 0;
$instance['hierarchical'] = !empty($new_instance['hierarchical']) ? 1 : 0;
$instance['dropdown'] = !empty($new_instance['dropdown']) ? 1 : 0;
return $instance;
}
public function form( $instance ) {
//Defaults
$instance = wp_parse_args( (array) $instance, array( 'title' => '') );
$title = esc_attr( $instance['title'] );
$count = isset($instance['count']) ? (bool) $instance['count'] :false;
$hierarchical = isset( $instance['hierarchical'] ) ? (bool) $instance['hierarchical'] : false;
$dropdown = isset( $instance['dropdown'] ) ? (bool) $instance['dropdown'] : false;
?>
<p><label for="<?php echo $this->get_field_id('title'); ?>"><?php _e( 'Title:' ); ?></label>
<input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo $title; ?>" /></p>
<p><input type="checkbox" class="checkbox" id="<?php echo $this->get_field_id('dropdown'); ?>" name="<?php echo $this->get_field_name('dropdown'); ?>"<?php checked( $dropdown ); ?> />
<label for="<?php echo $this->get_field_id('dropdown'); ?>"><?php _e( 'Display as dropdown' ); ?></label><br />
<input type="checkbox" class="checkbox" id="<?php echo $this->get_field_id('count'); ?>" name="<?php echo $this->get_field_name('count'); ?>"<?php checked( $count ); ?> />
<label for="<?php echo $this->get_field_id('count'); ?>"><?php _e( 'Show post counts' ); ?></label><br />
<input type="checkbox" class="checkbox" id="<?php echo $this->get_field_id('hierarchical'); ?>" name="<?php echo $this->get_field_name('hierarchical'); ?>"<?php checked( $hierarchical ); ?> />
<label for="<?php echo $this->get_field_id('hierarchical'); ?>"><?php _e( 'Show hierarchy' ); ?></label></p>
<?php
}
}

559行目からの部分がカテゴリ一覧を抽出する部分の様で、ここに depth という引数を記入します。 depth => 1 が’第一階層のみを表示’のようです。なので

$cat_args = array('depth' => '1', 'orderby' => 'name', 'show_count' => $c, 'hierarchical' => $h);

で親カテゴリだけが表示されます。

分かりやすくなってました。

前回xcodeをアップデートしたらiPhoneシミュレータの場所が変わってて焦りました。

/Users/[User]/Library/Developer/CoreSimulator/Devices/[DeviceID]/data/Containers/Data/Application/[App]

ということでしたが、Containers というディレクトリが無くたどり着けません。
いろいろ探した結果、

Applications/Xcode.paa/Contents/Developer/Applications/

に入ってました。
な〜んだ。

あと普通にXcodeをDockから右クリックして”Open Developer Tool”から開けました。