タグ

sqlとphpに関するkathewのブックマーク (11)

  • php artisan migrate で実行されるSQLが確認したい! - Qiita

    「migrate時の実行SQLがみれればいいのになー」とか思ってたらたまたま別の問題の原因を調べているときに↓の記事に行き着いた。 2年前のエントリで若干古い感は否めないが「こんな便利な機能が!」となったのでメモ代わりに書いておく。 Laravelでプライマリキーを使った1:1関連のテーブル分割で自動採番をしないようにする 最後に migrate の SQL を確認したいときは pretend オプションをつけると確認できます。 上記 2 テーブルのマイグレート SQL はこんな感じです。 $php artisan migrate --pretend CreateUsersTable: create table `users` (`id` int unsigned not null auto_increment primary key, `email` varchar(255) not n

    php artisan migrate で実行されるSQLが確認したい! - Qiita
  • PHP: PDOStatement::fetchAll - Manual

    Getting Started Introduction A simple tutorial Language Reference Basic syntax Types Variables Constants Expressions Operators Control Structures Functions Classes and Objects Namespaces Enumerations Errors Exceptions Fibers Generators Attributes References Explained Predefined Variables Predefined Exceptions Predefined Interfaces and Classes Predefined Attributes Context options and parameters Su

  • PHP PDO prepareでLIKE(部分一致)検索するときのbindValueのパラメータ|IT女子の仕事メモ

    ふつうに「%」で括ってもうまくいかない。 sqlを直に実行するとふつうに動くので、bindValueがうまくいっていない模様。 原因は、「%」をくっつけるタイミングでした。 $query = "select * from table where testdata like :value "; $stmt = $pdo->prepare($query); $stmt->bindValue(":value", '%'. $value .'%', PDO::PARAM_STR); sql文中ではなく、bindValueのときに付けてあげるのが正しいみたい。 ちなみに間違ったのはこういう記述↓ $query = "select * from table where testdata like %:value% "; あとこれも↓ $query = "select * from table wher

    kathew
    kathew 2019/04/04
  • PDO selectでデータを取得、fetchAll、queryメソッド | PHP入門~bituse~

    今回はPDOでSelect文を実行してみたいと思います。 以下のようなテーブルを準備してください。 mysql> select * from test; +----+------+------+ | id | num | name | +----+------+------+ | 1 | 1 | AAA | | 2 | 10 | BBB | | 3 | 100 | CCC | | 4 | 1000 | DDD | +----+------+------+ まずはプリペアドステートメントを使って実行してみたいと思います。 プリペアドステートメントがわからない人は「PDO プリペアドステートメント」のページを参照してください。 「PDO プリペアドステートメント」のページでは以下のようにデータを一件だけ取得するコードを書きました。 //PDOオブジェクトの生成 $pdo = new PDO("

    kathew
    kathew 2019/04/03
  • PDO prepare プリペアドステートメントの使い方 | PHP入門~bituse~

    今回はPDOのprepareメソッドについて説明します。 prepareメソッドはプリペアドステートメントと呼ばれるものを利用するための関数です。 プリペアドステートメントとは、SQL文を最初に用意しておいて、その後はクエリ内のパラメータの値だけを変更してクエリを実行できる機能のことです。 この機能を利用することでクエリの解析やコンパイル等にかかる時間は最初の一回だけで良くなり、より高速に実行することができます。 また、SQLインジェクション対策に必要なパラメータのエスケープ処理も自動で行ってくれるため、安全かつ効率の良い開発が出来ます。 プリペアドステートメントを利用してクエリを実行するには以下の流れで実行していきます。 PDOオブジェクトの作成 ↓ prepareメソッドでSQL文をセット ↓ bindValue or bindParamでパラメータに値をセット ↓ executeメソ

    kathew
    kathew 2019/04/03
  • PHPでのSQLインジェクション対策 - プレースホルダ編 | Let's POSTGRES

    第四企画 坂井 潔 SQLインジェクションの脅威からシステムを守るために、プログラミング言語/スクリプトからSQLを発行するときには、パラメータを適切に処理しなくてはなりません。今回はプレースホルダ編と題し、SQLインジェクション対策として最も簡単で効果的な方法を、PHPで説明します。 SQLインジェクションとは? まず「SQLインジェクション」とは何かおさらいしましょう。SQLインジェクションとは、アプリケーション(この場合はPHPスクリプト)に渡すパラメータの値を操作することで、元々は意図されていない処理をSQLとして実行させてしまうことです。 簡単な例をあげてみます。ユーザーから文字列「山田」が渡されたとき、以下のようなSELECT文を発行することにします。 SELECT * FROM users WHERE username LIKE '%山田太郎%'; ユーザーに入力された文字列

  • CakePHP で 関数実行等、自由なSQLの記述方法(Postresql) cake1.2 - ninoichibanの日記

    たとえば 以下のような WHERE句を書きたい場合 FROM "tests" AS "Tests" WHERE "Tests"."enable" = TRUE AND "Tests.modified" <= ( now()::date + ( add_days || 'days')::interval )::date ORDER BY modified DESC query()を使えば自由に書けるが、取得したデータ配列の取得方法が違う 以下のような params を指定する。 $params = array( 'conditions' => array ( 'enable' =>'true', array( "modified <= (now()::date + ( offset_days || 'days')::interval )::date)" ), ), 'order' => ar

    CakePHP で 関数実行等、自由なSQLの記述方法(Postresql) cake1.2 - ninoichibanの日記
    kathew
    kathew 2017/06/30
    WHEREに関数を使いたければ一個の条件式を全部文字列で書いてしまえばOKということね
  • PHPでのSQLインジェクション対策 - プレースホルダ編 | Let's POSTGRES

    第四企画 坂井 潔 SQLインジェクションの脅威からシステムを守るために、プログラミング言語/スクリプトからSQLを発行するときには、パラメータを適切に処理しなくてはなりません。今回はプレースホルダ編と題し、SQLインジェクション対策として最も簡単で効果的な方法を、PHPで説明します。 SQLインジェクションとは? まず「SQLインジェクション」とは何かおさらいしましょう。SQLインジェクションとは、アプリケーション(この場合はPHPスクリプト)に渡すパラメータの値を操作することで、元々は意図されていない処理をSQLとして実行させてしまうことです。 簡単な例をあげてみます。ユーザーから文字列「山田」が渡されたとき、以下のようなSELECT文を発行することにします。 SELECT * FROM users WHERE username LIKE '%山田太郎%'; ユーザーに入力された文字列

  • CakePHPでデータ削除 - 不思議なサービスをつくる新人プログラマーの日記

    この記事はCakePHP1.2向けです。 CakePHPでテーブルから1行削除するときには、del()を使います。 $r1 = $this->Model->del($id); //$id => 行のid もしくは、DELETE文を書いて、query()かexecute()を使う。 $sql = 'DELETE FROM model WHERE id = 10'; $r2 = $this->Model->execute($sql); では、上記の2つの方法の違いはなんだろうか? それをまとめておく。 1. 戻り値 上の例で、$r1と$r2の関係性を整理しておこう。 関数 delete 成功 失敗 del r1 true false execute r2 array()array() executeではDELETEが成功したのか、失敗したのかを判定する方法がない。 これでは、トランザクション処

  • CakePHP で Model を介さずに SQL を呼ぶ - d.hetima

    リードオンリーで単純な値、あるいは複数のテーブルをまたぐ統計、はたまたサイドメニュー等に必ず表示する値など、Model を使わない方が良い気がするデータをどう取得するか。そういう値も Model を使えよという意見もあるだろうし、実際迷っているとこですが、Model を使わずに済ませる方法をメモしておきます。 ちなみに上記の例で Model を使わない理由・メリットを挙げると、 リードオンリーで単純な値(例えば内部処理の if 文のみに使われる真偽値) → 変数だけで済めば軽い 複数のテーブルをまたぐ統計 → どの Model に記述したら良いか迷う サイドメニュー等に必ず表示する値 → 来の処理では使わない Model が毎回ロードされるのを避ける といったところでしょうか。基的にはパフォーマンスの問題です。また、今回のケースでは、AppController と 実際の Contro

  • CakePHPでサブクエリを使う - hiroaki's Lab

    まず、modelクラスにあるqueryメソッドを使用する方法です。 下記コードのようにSQL文をqueryメソッドのパラメータとして渡すだけです。これで目的のデータが取得できます。この方法が一番手っ取り早くわかりやすいと思います。 class FruitsController extends AppController { public $name = 'Fruits'; public function index() { $sql = 'SELECT Fruit.id, Fruit.name, Fruit.price, (SELECT SUM(F2.price) FROM fruits F2 WHERE Fruit.id >= F2.id) AS sum_price FROM fruits Fruit ORDER BY Fruit.id ASC'; $results = $this->F

  • 1