【php】MySQLのデータの判定や値の受け渡しなど【twitter自動投稿システム】

この記事は最終更新から4年以上が経過しています。情報が古くなっている可能性があります。

phpをぼちぼち勉強し始め、DBやAPIとの連携によって出来ることが大きく広がることに気づき始めたこの頃です。

フォーム・ログイン機能の検証を経て、最近はmamp環境でtwitterAPIを使った投稿予約システムを作り始めました!

実装したい仕様を決めてからのプログラミングだったので、どの関数を使うべきか手探り匍匐前進状態ですが、現時点で特に勉強になったこと、苦戦したところを書き残したいと思います。

(前提)作ろうとしているtwitter投稿予約の仕様

以下の機能を持つシステムを作ろうとしています。ざっくり。

  • ツイート内容、および投稿日時或いは投稿間隔をブラウザ上から登録することで、指定した日時或いは定期的な自動投稿を行う
  • 登録された内容はDBで管理
  • phpはcronによって起動し、登録された日時と現在時刻が合致したらツイートを実行する

日付形式のデータをPHPとMySQLでやりとりする方法

DBにてDATE型、DATETIME型で作成したカラムの値と、phpで使用する日付の値をやりとりする方法です。
phpはどんな型に入れればいいの?と謎の迷走をしたのでメモ。

MySQLではそれぞれ以下のようなフォーマットで認識されます。

  • DATE型:YYYY-MM-DD、YYYYMMDD など
  • DATETIME型:YYYY-MM-DD HH:MM:SS、YYYYMMDDHHMMSS など

対して、phpは特に変数の型として日付型を持っていません。どうすればいいかというと、ただ単純に文字列型で書式を合わせれば大丈夫!ということ。

もしフォームで入力した値をDBに渡したいという場合、こういう形で規定のフォーマットに合わせれば受け渡しができます。

そもそもphp上でdate()として取得してくる値も文字列型なんだから、特に迷うところでは無かったのかもしれない。。(°Д°;)

DBのテーブルにレコードがあるかないかを確認する方法

投稿内容を入力するページに予約済みの内容を一覧表示させたくて調べました。テーブルのレコードの存在有無を判定にしたいときは以下の記述で出来ます。

num_rowsはテーブルのレコード数を取得してくるオブジェクト指向型の関数です。

最初、記事で見かけた「mysql_num_rows($result)」という書き方にしたところ、なぜだかうまく動きませんでした。

調べたところ

「結果セットをバッファに格納しているかどうかに依存します。結果セットを バッファに格納していない場合、すべての行を取得し終えるまで mysqli_num_rows() は正確な行数を返しません。」

参考)PHP: mysqli_result::$num_rows – Manual

手続き型プログラミング

  • オブジェクト指向と手続き型の重要な違いとして、オブジェクト指向では関係データベースにアクセスするにあたって、データモデルのクラス構造へのマッピングが必要である。
  • 手続き型と見なされるプログラミング言語は、手続き(プロシージャ)の概念を明確に持っていて、構文として定義している。

参考)wikipedia

ということでした。
オブジェクト指向型は馴染みがありますが、手続き型はどういうものなのか、具体的にどういうことが出来てどうオブジェクト志向型と使い分けるかよくわかっていません。
うーん。。バッファを使う時はこちらがいいということなのか。

こちらは追々調べてみようと思います。

自動で連番を振り直す方法

永久欠番のプライマリキーとは別に、存在するデータで常に連番を振りたいときに使える方法です。
SQL文としては以下の記述で連番の振り直しができます。

phpからデータを登録・削除するたびに連番を振り直したい場合は、上記の命令文を処理のたびに、1行ずつ分けて実行してあげることで可能です。

例)カラム「new_id」に連番を振り直す場合

・エラーが発生する書き方

どうやら原則複数行処理はまとめてできないようで、クエリを1行にまとめてしまうとエラーが発生するので注意が必要です。
参考)複数行のクエリを、まとめて実行するには?mysqli_multi_query()?